我執行了一個程序,當我計算時間流逝時,我發現時間不是恆定的。它在一定範圍內變化。我想知道爲什麼是這樣?爲什麼時間不斷變化?
回答
因爲有許多進程與您的應用程序同時運行。
即使您設法完全隔離您的應用程序,也無法保證相同的代碼每次都會以相同的速度運行。這就是爲什麼如果你正在測試性能的話,你應該在多次運行的平均值上進行測試(假設這就是你在做的)。
如果正在測量效率,也有定義它的更客觀/正規途徑:
參見:Big-O notation
你經常會發現這樣的行爲時測量經過時間。這是因爲經過的時間取決於您的計算機可能正在做的所有其他事情。
參見例如:
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
)來消除外部影響。您還應該使用統計技術來獲得更準確的圖像。例如,我傾向於做十二次運行,扔掉異常值(最快和最慢),然後平均剩餘的十次。
這裏'user + sys'只是一致的,因爲代碼很簡單。如果其他進程正在運行,由於緩存污染,資源爭用(例如,如果多個進程正在執行io等),實際代碼將具有廣泛不同的'用戶'和'系統時間'等。 – 2010-08-16 06:21:41
毫無疑問,但我所做的是儘可能精確地使用度量 - '用戶+系統'仍然比經過的時間精確得多,統計平均將減輕其他因素的影響。 – paxdiablo 2010-08-16 06:40:45
- 1. 爲什麼grepping PID不斷變化?
- 2. Windows 8時間變化不斷
- 3. PHP date_default_timezone_set不改變時間() - 爲什麼?
- 4. 爲什麼PermGen空間不斷增長?
- 5. SessionID在ASP.NET MVC中不斷變化,爲什麼?
- 6. 爲什麼重定向不斷變化的地址欄
- 7. 爲什麼回調前的持續時間不斷增加?
- 8. 是不斷變化
- 9. 不斷變化頁
- 10. 爲什麼我的位置不斷變化,我的代碼不正確?
- 11. Hive表中的時間戳不斷變化
- 12. py.test:嘲諷不斷變化的日期時間對象
- 13. 什麼是不變文化?
- 14. 爲什麼在運行時不DataDirectory目錄變化
- 15. 路由發生變化時,爲什麼不發出HTTP請求?
- 16. 觸摸次數變化時爲什麼觸摸不會觸發?
- 17. 爲什麼變量值異常變化
- 18. 爲什麼我設定時間但變得不同?
- 19. 爲什麼散列表的平均訪問時間不變?
- 20. 爲什麼autograd不會爲中間變量產生漸變?
- 21. 爲什麼Thread.Sleep長時間不精確?
- 22. 爲什麼變量有時不分配?
- 23. Ubuntu inet addr不斷變化
- 24. NSMutableArray計數不斷變化
- 25. DetailTextLabel不斷變化的UITableViewCell
- 26. 事件值不斷變化
- 27. Oracle 10g爲什麼要to_char(日期時間)截斷字符串?
- 28. 爲什麼常變量不被視爲編譯時間常數有時
- 29. Sharepoint爲什麼不斷重新格式化HTML?
- 30. 爲什麼小空間不斷出現在我的網頁中?
因爲你的電腦做了不止一件事情。 – GManNickG 2010-08-16 05:58:24
什麼都不是常數(除了'const'):P – alex 2010-08-16 05:58:27
唯一不變的是「更改」。 – 2010-08-16 06:07:23