我习惯在 Ubuntu 14.04 的标准终端上对脚本time
进行计时。Perl
我有读那real time
是秒表时间;作为用户,我花在查看程序从启动程序直到程序终止运行的时间。但我不明白是什么user
或sys
时间是什么。time
至少可以说,手册页很模糊。
虽然real
时间是分开的user
,但sys
尚不清楚它们代表什么。
在我的脚本中,我对 C++ 和 Perl 进行基准测试[1]以查看差异,并且我想知道我实际获得的数据。输出示例如下:
real 0m24.198s
user 0m23.120s
sys 0m1.030s
有人可以详细说明默认的时间格式告诉用户什么吗?我是 Linux 新手,所以请不要假设太多。
real
[1] 有趣的是,虽然在我的基准测试中,C++ 在时间方面比 Perl 快得多,sys
但时间差别并不大,C++ 实际上sys
比 Perl 使用更多的时间。这就是为什么我想知道它们的含义
答案1
从维基百科:
- 用户时间与系统时间
“用户 CPU 时间”一词一开始可能会有点误导。需要明确的是,总 CPU 时间是 CPU 为程序执行某些操作所花费的时间和 CPU 代表程序为内核执行系统调用所花费的时间的组合。当程序循环访问数组时,它会累积用户 CPU 时间。相反,当程序执行 exec 或 fork 等系统调用时,它会累积系统 CPU 时间。
- 实时与 CPU 时间
本文中的术语“实时”指的是经过的“挂钟”时间,就像使用秒表一样。总 CPU 时间(用户时间 + 系统时间)可能大于或小于该值。由于程序可能会花费一些时间等待并且根本不执行(无论是在用户模式还是系统模式),因此实际时间可能大于总 CPU 时间。由于程序可能会派生子进程,其 CPU 时间(用户和系统)会添加到 time 命令报告的值中,因此总 CPU 时间可能会大于实际时间。