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()
,