我正在尝试对形如下面的异步操作进行基准测试:
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中是否有类似的功能?
cb.complete()
怎么样?这是一个微型基准测试框架,而不是集成测试框架。 - ericksonRunnable
在我的应用程序中提交给一个Executor
,那么在JMH中,我会直接调用它的run()
方法。在op()
方法内部创建一个类似于Runnable
的东西,然后将其提交给执行器吗? - erickson