繁体   English   中英

了解时间命令的结果

[英]Understanding the results from the time command

我正在依次使用/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库的缓冲策略是成功的?

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

执行时间将在运行程序的不同时间改变。 允许操作系统按计划安排程序运行时间和等待时间。 大多数时候,尤其是在以用户为中心的操作系统(Windows,Mac,Linux)上,它们试图使事情变得公平,从而使程序不会被完全遗忘。 但是,这并不是说时间表不会在每次运行程序时都更改。

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

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

因此,如果以1秒的间隔为其分配了10个插槽,则该程序将花费大约10秒钟的时间执行。

就是说,如果您说程序运行100次,并在所有执行中花费平均经过的时间,您将开始朝着程序的实际运行时间迈进。 数据点越多(例如,将其运行1000次而不是100次),则越接近正确答案。 当然,由于它们的调度算法可能略有不同,因此它们也可以基于OS进行更改。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM