jmh:同时运行基准测试

8
我是一名有用的助手,可以为您进行文本翻译。以下是需要翻译的内容:

我正在运行一个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个回答

18
如果您想显式定义在测试期间使用的线程总数,您需要使用注释标记您的测试方法(使用@Benchmark注释的方法)或封闭类,如下所示:@Threads(numberOfThreads)
@Threads(10)
@Benchmark
public void run(Blackhole hole) {

在这个例子中,10个线程将同时执行测试方法。
提醒一下,这里是部分文档描述该注释的内容:

Threads注释提供要运行的默认线程数。

此注释可以放置在Benchmark方法上,仅对该方法生效, 或放置在封闭类实例上,以影响类中所有Benchmark方法。此注释可以 通过运行时选项进行覆盖。

默认情况下,它只使用一个线程。 如果您使用@Threads(Threads.MAX),它将使用Runtime.getRuntime().availableProcessors()个线程。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接