2010-08-16 59 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