当我这样做时$(time sleep 1)
,我得到了:
real 0m1.001s
user 0m0.000s
sys 0m0.000s
我不确定为什么sys
时间是 0,所以nanosleep
是从用户空间调用的?
另外,实时是否等于上下文切换时间+实际睡眠时间(1s)?
当我这样做时$(time sleep 1)
,我得到了:
real 0m1.001s
user 0m0.000s
sys 0m0.000s
我不确定为什么sys
时间是 0,所以nanosleep
是从用户空间调用的?
另外,实时是否等于上下文切换时间+实际睡眠时间(1s)?
因为进程在睡眠时没有执行内核空间代码。内核正在执行其他进程,或者空闲,这两者都不受睡眠进程的影响。
查看 time的手册页,我们可以看到,
real:程序终止的时间长度,计算方式为:
(time at end of program - time at star of program)
user:由 times(2) 返回的 struct tms 中 tms_utime 和 tms_cutime 值的总和
sys:times(2) 返回的 struct tms 中 tms_stime 和 tms_cstime 值的总和
所以你得到有效的结果意味着你的程序持续了 1 秒,在那 1 秒内它使用 0 秒作为用户时间,0 秒作为系统时间。这正是我们应该从程序中得到的。
当一个程序处于休眠状态时,它只是意味着内核不会安排它进行处理,它甚至不会运行 no-ops,它只是不会运行,因此不会消耗系统时间。