2010-08-16 61 views
2

我执行了一个程序,当我计算时间流逝时,我发现时间不是恒定的。它在一定范围内变化。我想知道为什么是这样?为什么时间不断变化?

+5

因为你的电脑做了不止一件事情。 – GManNickG 2010-08-16 05:58:24

+3

什么都不是常数(除了'const'):P – alex 2010-08-16 05:58:27

+0

唯一不变的是“更改”。 – 2010-08-16 06:07:23

回答

6

因为有许多进程与您的应用程序同时运行。

即使您设法完全隔离您的应用程序,也无法保证相同的代码每次都会以相同的速度运行。这就是为什么如果你正在测试性能的话,你应该在多次运行的平均值上进行测试(假设这就是你在做的)。

如果正在测量效率,也有定义它的更客观/正规途径:
参见:Big-O notation

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)来消除外部影响。您还应该使用统计技术来获得更准确的图像。例如,我倾向于做十二次运行,扔掉异常值(最快和最慢),然后平均剩余的十次。

+1

这里'user + sys'只是一致的,因为代码很简单。如果其他进程正在运行,由于缓存污染,资源争用(例如,如果多个进程正在执行io等),实际代码将具有广泛不同的'用户'和'系统时间'等。 – 2010-08-16 06:21:41

+0

毫无疑问,但我所做的是尽可能精确地使用度量 - '用户+系统'仍然比经过的时间精确得多,统计平均将减轻其他因素的影响。 – paxdiablo 2010-08-16 06:40:45