[英]How to benchmark asynchronous operations with JMH
我正在尝试对具有以下形式的异步操作进行基准测试:
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);
}
JMH提供的BenchmarkCompletion表示操作已完成。
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)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.