为何User Space与System Space时长之和大于Clock时长?
关于
time(1)时间统计与APUE图15.29的疑惑解答 首先明确time(1)工具的三个时间定义:
User:进程在用户态消耗的CPU时间(单核心视角的累计时间)System:进程在内核态消耗的CPU时间(单核心视角的累计时间)Clock (Wall Clock Time):从进程启动到终止的实际流逝时间
你提到的“Clock时长大致为前两者之和”只适用于单线程/单进程且无等待的场景:此时进程独占一个CPU核心,CPU时间(User+System)就是进程占用核心的总时间,Clock时间等于这个总和(可忽略极短的调度开销)。
但APUE图15.29中第二行的情况(Clock=0.07,User+System=0.30),核心原因是测试程序使用了多线程/多进程并行执行:
time(1)统计的User+System是所有线程/进程的CPU时间总和(比如4个线程各跑0.075秒用户态,总User时间就是0.3秒)- 而Clock时间是实际流逝的时间,因为多个线程同时在不同CPU核心上运行,实际耗时只需要0.07秒左右,自然远小于总CPU时间之和。
这不是你误解了概念,也不是作者没使用time(1)——time(1)本身就会正确统计多线程程序的总CPU时间,这种“Clock < User+System”的情况在并行程序中非常常见。
内容的提问来源于stack exchange,提问作者YiLuo
相关产品推荐
相关产品推荐

