我正在使用/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库的缓冲策略是 成功?
答案 0 :(得分:5)
执行时间将在运行程序的不同时间发生变化。允许操作系统根据需要安排程序运行时间和等待时间。大多数时候,特别是在以用户为中心的操作系统(Windows,Mac,Linux)上,他们试图使事情变得公平,因此程序并没有完全被遗忘。但是,并不是说每次运行程序时调度都不会改变。
例如,也许您是第一次运行它,并且只有1个(极不可能)其他进程需要同时运行。您的计划将获得更多的时间段。然后你再次运行你的程序,但这次也有10个程序在运行。这意味着您的代码突然可能会获得1/10(十分之一)或上次执行时的时间段。
可悲的是,大多数情况下,当您查看执行时间时,您会在程序开始运行之前(第一次)获取时间戳,然后在完成后再次执行。这意味着它是从第一次计划开始到完成计划的整个时间。
因此,如果以1秒的间隔获得10个时隙,程序执行将需要大约10秒。
也就是说,如果你运行你的程序100次,并且比所有执行时间平均花费的时间,你将开始朝着你的程序的实际运行时间。数据点越多(比如运行1000次而不是100次),就越接近你得到的正确答案。当然,这也可以基于OS进行更改,因为它们可能具有稍微不同的调度算法。