Why is real time more than user+system+total?
我做了一个基准测试做随机事情,看看这些事情花了多少时间:
1 2 3 4 | 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.我不明白这是怎么回事。
如果它是相关的,这些是我的基准测试:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 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 |
编辑:所以我将
1 2 3 4 | 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。