同一段代碼在不同的ide上執行速度不一樣,是啥原理?

DiArt


這個問題要從兩個方面來說,一層是軟件本身,另一層是IDE(包括編譯器、優化器、鏈接器等),下面分別說明。

先說軟件本身的影響,有些程序自身會受操作系統的影響,比如一些多線程程序或者是需要申請資源的程序,因為資源的有限性,每次申請時會存在排隊現象,就導致每次執行的速度不一樣;還有一些程序會受外界環境的影響,比如程序中存在一些隨機過程,某部分代碼運行次數是一個隨機數,這樣也會導致每次運行速度不一樣。以上兩種情況,即使是同樣的IDE生成可執行程序,每次的運行速度也不一樣。見下圖的線程調度過程。


還有一種是IDE的影響,這個要從編譯過程說起,見下圖:

每個現代編譯器都會有一個優化器,會在生成最終的可執行文件之前對程序進行優化。即使使用同一個IDE編譯同樣的程序,不同的優化等級生成的應用程序運行速度也會不一樣。此外,因為每種IDE(更準確地說是編譯器)的優化算法都不太一樣,所以不同的IDE,即使使用同樣的優化等級,生成的應用程序運行速度也會不一樣。下圖是VS中的代碼優化選項:

還有一種情況是程序中使用了庫文件,因為同樣的庫,在不同的IDE中實現細節是有差別的,這種情況也有可能造成運行速度不一樣。

總之,程序的運行速度受操作系統、IDE、引用庫文件、外部環境等多種因素的影響,它們組合起來就會導致即使同樣的代碼也會運行速度不一致。但是一般來說,可以通過觀察程序多次的運行情況,然後根據平均值來比較,對於同樣的硬件平臺,只要差別不超過10%(和物理學中的誤差類似),就可以認為兩個的速度是一致的。


編碼之道


管他呢,只要放在生產環境上達到要求就行了


鹿德興


同一段代碼你執行兩次速度也是不一樣的。你這種情況主要是由於cpu調度和內存管理引起的。你在cpu負載很重的情況下執行這代碼,肯定沒有你在cpu負載輕的情況下快。同理,內存的佔用情況也是如此。所以你這個問題不能賴給ide,因為本質是和ide無關,只是體現在用不同ide上速度不一樣而已。

除此以外,操作系統對任務的調度算法也會影響代碼的執行時間。試想你運行片段一的時候,沒有其他跟高優先級的任務,你就能很快完成。而你運行代碼片段2的時候,操作系統中多了很多優先級高於你的任務,所以你就需要等待,等待時間最終也會算入執行時間。

但是,如果你只管cpu時間的話,理論上講在cpu上的時間是一樣的。但這個時間似乎是無法統計的。所以,同一段代碼執行時間不同完全是正常的。


分享到:


相關文章: