繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM