你好,我是徐文浩,今天是第二期 FAQ,我搜集了第 3 讲到第 6 讲,大家在留言区问的比较多的问题,来做一次集中解答。
有些问题,可能你已经知道了答案,不妨看看和我的理解是否一样;如果这些问题刚好你也有,那可要认真看啦!
希望今天的你,也同样有收获!
Q1:为什么 user + sys 运行出来会比 real time 多呢?
我们知道,实际的计算机运行的过程中,CPU 会在多个不同的进程里面切换,分配不同的时间片去执行任务。所以,运行一个程序,在现实中走过的时间,并不是实际 CPU 运行这个程序所花费的时间。前者在现实中走过的时间,我们叫作 real time。有时候叫作 wall clock time,也就是墙上挂着的钟走过的时间。
而实际 CPU 上所花费的时间,又可以分成在操作系统的系统调用里面花的 sys time 和用户态的程序所花的 user time。如果我们只有一个 CPU 的话,那 real time >= sys time + user time 。所以,我当时在文章里给大家看了对应的示例。
不过,有不少同学运行出来的结果不是这样的。这是因为现在大家都已经用上多核的 CPU 了。也就是同一时间,有两个 CPU 可以同时运行任务。
你在一台多核或者多 CPU 的机器上运行,seq 和 wc 命令会分配到两个 CPU 上。虽然 seq 和 wc 这两个命令都是单线程运行的,但是这两个命令在多核 CPU 运行的情况下,会分别分配到两个不同的 CPU。