N.times { Thread.new { puts Benchmark.measure { /* code */ } } }
基准测试显示的是线程中实际执行代码所花费的时间,还是它显示了 Ruby 解释器在任何线程上运行的总时间,而我们考虑的线程仍然存在(即使它因为另一个线程正在运行而暂停)?
例如,假设线程 A 已经执行了 1 毫秒,然后 MRI 切换到线程 B 并保持了 3 毫秒。最后,线程 A 再次执行,在另外 1 毫秒后终止。
对于线程 A,基准测试显示的是 2 毫秒还是 5 毫秒作为总时间?(不是实时时间)
更新:我认为单个 Sidekiq 进程会生成多个 Ruby 线程。因此,讨论 Sidekiq 作业而不是线程是等效的。当 Sidekiq 执行一些其他重型作业时,我有一些需要更多 CPU 时间的 Sidekiq 作业。这让我认为基准测试包括了花费在其他作业上的时间。但是,也许 @mudasobwa 是正确的,CPU 时间不包括花费在其他线程/作业上的时间。在这种情况下,我唯一能给出的解释是系统连接/带宽是瓶颈(我的轻量级作业性能受到消耗大量带宽的其他重型作业的影响)。