1. 场景设想
我们现在设想一个场景, 我们是一个电商系统
今天双十一
我们的订单服务设置了自动扩容的策略
晚上0点的时候, 我们的订单服务会涌进来大量的请求
如果我们这时候动态扩容, 许多服务进程的线程池实际上是刚刚初始化的状态
那么随着请求不断的进来, 我们处理业务的线程会逐渐越来越多
这时候我们的CPU使用率是一个平滑的曲线
我们的JMH的多线程基准测试, 默认的策略是, 设置10个线程, 那么等10个线程都初始化完成之后, 再同时一起执行基准测试
那我们的JMH如何模拟刚才说的线程逐渐增加这种情况进行测试呢?
让负载逐渐增加
在我们使用JMH的时候, 我们可能会使用多线程对一个Benchmark进行测试
分析在多线程环境下执行得快不快
这里会有一个问题, 线程的创建是有先后顺序的
如果我们一个测试用例, 要创建很多线程, 然后再执行benchmark的方法
会不会把很多时间浪费在了初始化线程上
于是JMH提供了一个参数.syncIterations(true)
true的情况下(默认就是true), 会等所有线程都初始化好了, 再一起执行benchmark
就像赛马比赛, 所有马儿都先被栅栏拦住, 等栅栏一升上去,再一起起步竞赛
如果设置false, 那那么多个线程, 谁先初始化谁就先执行, 这样的话受环境干扰就很严重了