了解time命令的结果

时间:2015-02-02 05:34:35

标签: c linux

我正在使用/usr/bin/time命令连续运行程序,并获得以下结果:

Invocation 1

real    0m0.044s

user    0m0.000s

sys 0m0.041s

Invocation 2

real    0m0.037s

user    0m0.002s

sys 0m0.032s

Invocation 3

real    0m0.033s

user    0m0.001s

sys 0m0.029s

这些小变化可能是什么原因?

这是否表明标准I / O库的缓冲策略是 成功?

1 个答案:

答案 0 :(得分:5)

  • real:程序开始和结束之间经过的总时间。
  • user:程序使用的用户CPU时间。这包括程序所做的所有用户模式库调用。
  • sys:程序使用的系统CPU时间。这仅包括内核系统调用,而不包括任何用户库调用。

执行时间将在运行程序的不同时间发生变化。允许操作系统根据需要安排程序运行时间和等待时间。大多数时候,特别是在以用户为中心的操作系统(Windows,Mac,Linux)上,他们试图使事情变得公平,因此程序并没有完全被遗忘。但是,并不是说每次运行程序时调度都不会改变。

例如,也许您是第一次运行它,并且只有1个(极不可能)其他进程需要同时运行。您的计划将获得更多的时间段。然后你再次运行你的程序,但这次也有10个程序在运行。这意味着您的代码突然可能会获得1/10(十分之一)或上次执行时的时间段。

可悲的是,大多数情况下,当您查看执行时间时,您会在程序开始运行之前(第一次)获取时间戳,然后在完成后再次执行。这意味着它是从第一次计划开始到完成计划的整个时间。

因此,如果以1秒的间隔获得10个时隙,程序执行将需要大约10秒。

也就是说,如果你运行你的程序100次,并且比所有执行时间平均花费的时间,你将开始朝着你的程序的实际运行时间。数据点越多(比如运行1000次而不是100次),就越接近你得到的正确答案。当然,这也可以基于OS进行更改,因为它们可能具有稍微不同的调度算法。