3

当我这样做时$(time sleep 1),我得到了:

real    0m1.001s
user    0m0.000s
sys     0m0.000s

我不确定为什么sys时间是 0,所以nanosleep是从用户空间调用的?

另外,实时是否等于上下文切换时间+实际睡眠时间(1s)?

4

2 回答 2

6

因为进程在睡眠时没有执行内核空间代码。内核正在执行其他进程,或者空闲,这两者都不受睡眠进程的影响。

于 2012-08-05T09:39:21.007 回答
4

查看 time的手册页,我们可以看到,

  1. real:程序终止的时间长度,计算方式为:

    (time at end of program - time at star of program)

  2. user:由 times(2) 返回的 struct tms 中 tms_utime 和 tms_cutime 值的总和

  3. sys:times(2) 返回的 struct tms 中 tms_stime 和 tms_cstime 值的总和

所以你得到有效的结果意味着你的程序持续了 1 秒,在那 1 秒内它使用 0 秒作为用户时间,0 秒作为系统时间。这正是我们应该从程序中得到的。

当一个程序处于休眠状态时,它只是意味着内核不会安排它进行处理,它甚至不会运行 no-ops,它只是不会运行,因此不会消耗系统时间。

于 2012-08-05T09:46:54.937 回答