我执行了一个程序,当我计算了经过的时间后,我发现时间不是恒定的。它在某种范围内变化。我想知道为什么会这样?
答案 0 :(得分:6)
因为有许多进程与您的应用程序同时运行。
即使您设法完全隔离了您的应用程序,也无法保证每次都以相同的速度运行相同的代码。这就是为什么如果你正在测试性能,你应该真正平均多次运行(假设这是你在这里做的)。
如果您正在衡量效率,有更客观/正式的方法来定义它:
请参阅: Big-O notation
答案 1 :(得分:2)
测量经过时间时,您经常会发现这种行为。这是因为经过的时间取决于您的计算机可能正在做的所有其他事情。
参见例如:
pax> time sleep 1
real 0m1.012s
user 0m0.004s
sys 0m0.000s
pax> time sleep 1
real 0m1.002s
user 0m0.004s
sys 0m0.000s
pax> time sleep 1
real 0m1.007s
user 0m0.004s
sys 0m0.000s
在所有这些情况下,经过的real
时间会有所不同,但处理器的实际使用情况user+sys
非常一致。
对于计时,您应该使用最准确的测量(例如user+sys
)来消除外部影响。您还应该使用统计技术来获得更准确的图片。
例如,我倾向于做十二次运行,抛弃异常值(最快和最慢),然后平均剩下的十次。