gpt4 book ai didi

java - 如何使用 JMH 对异步操作进行基准测试

转载 作者:行者123 更新时间:2023-12-05 05:19:19 27 4
gpt4 key购买 nike

我正在尝试对具有以下形式的异步操作进行基准测试:

void op(Callback cb);

我可以使用以下方式进行基准测试:

@Benchmark
void issueOp(BenchState state) {
state.svc.op(nullCb);
}

但这只是衡量发出操作的时间,而不是完成时间。

@Benchmark
void issueOp(BenchState state) {
final CountDownLatch latch = new CountDownLatch(1);
Callback signalCb = new Callback() {
public void complete() {
latch.countDown();
}
};
state.svc.op(signalCb);
signalCb.await();
}

确实测量完成时间,但一次只有一个操作排队。

我真的很喜欢这样的东西:

@AsyncBenchmark
void issueOp(BenchState state, final BenchmarkCompletion bc) {
Callback cb = new Callback() {
void complete() {
bc.complete();
}
};
state.svc.op(cb);
}

其中 BenchmarkCompletion 是 JMH 提供的用于指示操作完成的东西。

JMH有这样的东西吗?

最佳答案

你可以这样写:

  final private val OperationsPerInvocation = 10000
@Benchmark
@OperationsPerInvocation(OperationsPerInvocation)
def schedulePeriodicallyBenchmark(): Unit = {
val latch = new CountDownLatch(OperationsPerInvocation)
timeServiceScheduler.schedulePeriodically(Duration.ofMillis(100)) {
latch.countDown()
}
latch.await(20, TimeUnit.MINUTES)
}

关于java - 如何使用 JMH 对异步操作进行基准测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46528005/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com