0

假設您想對不同的JavaScript循環的性能進行基準測試,例如:http://jsperf.com/fastest-array-loops-in-javascript/11。或者你想在命令行上用Unix time命令進行基準測試。每次執行代碼的方式是什麼?

在計算機內部,什麼東西會阻止代碼每次都以相同的持續時間執行?我所說的「持續時間」,爲什麼Node.js中的JavaScript while (i--)循環不會每次都精確到1.3284ms?尋找晶體管和高級編程語言之間的連接(一些關鍵詞或論文)。

+0

它還取決於操作系統在不同時間的資源可用性,除了其他因素 –

+0

我的問題是,這些「資源」是什麼,它們是如何工作的?我如何將它們包含在基準計算中,以便將它們從等式中移除? –

+1

我想這是關於在多任務環境下進行調度。有像IMO緩存命中/未命中這些因素可能會因執行而不同的因素。如果你完全想要消除這些因素,你將不得不在沒有多任務操作系統的情況下運行你的應用程序。 –

回答

2

由於時間分辨率的原因,測量首先不準確。例如,請參閱times

如果有很多進程在運行,您將獲得不同的掛鐘時間,而只有少數進程競爭CPU時間。

緩存未命中,交換也會干擾,從一次運行到另一次運行導致不同的總時間。

如果您從磁盤讀取文件,文件塊的分配也會影響讀取或寫入文件的時間。

+0

「丟失」時間在計算中稱爲上下文切換。操作系統在執行不同進程的少量比特時會切換上下文,這是操作系統所需的時間。每個進程的CPU時間只會增加實際執行給定進程的時間。切換到另一個進程所需的時間仍將計入任何時間在代碼級別上完成的測量。 – marekful

相關問題