为什么实时比用户 系统 总计更多



我进行了一个基准测试,进行随机的事情,以查看这些事情花了多少时间:

                              user     system      total        real
joining an array of strings  0.040000   0.010000   0.050000 (  0.046636)
string interpolation         0.020000   0.000000   0.020000 (  0.023903)
just timing                  0.000000   0.000000   0.000000 (  0.004334)

我想实时的时间可能小于总时间,因为我有一个多核心处理器,但是在最后一个情况下,只有其他时间是实时的,而其他人则是0。

如果相关,则这些是我的基准测试:

require 'benchmark'
iterations = 10_000
Benchmark.bm do |bm|
  bm.report('joining an array of strings') do
    iterations.times do
      ["The","Current","Time","Is",Time.now].join(" ")
    end
  end
  bm.report('string interpolation') do
    iterations.times do
      "The current time is #{Time.now}"
    end
  end
  bm.report('just timing') do
    iterations.times do
      Time.now
    end
  end
end

编辑:所以我将iterations撞到iterations = 1_000_000,这些是新结果:

                               user     system      total        real
joining an array of strings  3.640000   0.000000   3.640000 (  3.644826)
string interpolation         2.390000   0.000000   2.390000 (  2.393069)
just timing                  0.390000   0.000000   0.390000 (  0.392369)

实时似乎仍然超过总时间,即使上次测试的时间低于分辨率,我仍然不会明白这一点,那么实时时间也应该是0,情况并非如此。

一个过程可以处于阻止等待状态,主要是在等待IO时。在这个时候,该过程不在CPU上,因此不计算CPU时间。

总数和系统 用户之间存在更大差异的另一个原因是一个系统,高负载,过程非常频繁地打开和关闭CPU。

相关内容

  • 没有找到相关文章

最新更新