我正在运行jmh benchmark,但每次试用中的调用都是按顺序进行的。如何让调用同时运行?
这是我的代码摘要:
@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
。答案 0 :(得分:6)
如果要显式定义测试期间要使用的线程总数,则需要使用@Benchmark
注释您的测试方法(使用@Threads(numberOfThreads)
注释的方法)作为下一步:
@Threads(10)
@Benchmark
public void run(Blackhole hole) {
在此示例中,10
个线程将同时执行测试方法。
作为提醒,以下是描述此注释的文档的一部分:
@Threads
:用于测试的线程数。默认是Runtime.getRuntime().availableProcessors()
。