JMH: запустить тест одновременно

Я запускаю тест JMH, но вызовы в каждом испытании происходят в серийном режиме. Как я могу сделать вызовы запущенными одновременно?

Вот краткое изложение моего кода:

@State(Scope.Benchmark)
public class FooBenchmark {
    @Param({"123456"})
    public int barId;

    @Setup
    public void setup() {
    }

    @Benchmark
    public void run(Blackhole hole) {
        System.out.println("A"); // for proof that it's serial (see below)
        ...
        System.out.println("B"); // for proof that it's serial (see below)
    }   
}

Это напечатает A, а затем B. Никогда не будет давать два последовательных A или B.

1 ответ

Решение

Если вы хотите явно определить общее количество потоков, которые будут использоваться во время вашего теста, вам нужно аннотировать ваш метод теста (метод, помеченный как @Benchmark) с @Threads(numberOfThreads) как следующее:

@Threads(10)
@Benchmark
public void run(Blackhole hole) {

В этом примере 10 потоки будут выполнять тестовый метод одновременно.

Как напоминание, вот часть документа, которая описывает эту аннотацию:

@Threads: Количество потоков, используемых для теста. По умолчанию Runtime.getRuntime().availableProcessors(),

Другие вопросы по тегам