系統優化之 大迴圈在內,小迴圈主外 為什麼會效率高

2021-06-17 23:48:07 字數 546 閱讀 4314

下面引自

這個問題的主要原因是cpu內部的指令執行機制。現在,基本上cpu內部都有分支指令**,就是當執行(現在大多將這一階段提前到預取指令時執行)到轉移指令時,都會直接從分支目標快取(btb)中取出目標指令的位址,然後將要執行的指令提前預取到cpu的指令預取指令佇列中。這樣,顯然大大提高了效率。舉個例子,乙個10次的一層迴圈在執行時,除了在第一次和最後一次會**錯誤外,其他8次都會預取成功,避免了執行轉移指令時重新取出新指令造成的時間浪費。

所以,當有兩層迴圈,外層迴圈數為a,內層為b,a遠大於b,那麼最終造成的**錯誤數為a*2+2,而如果外層數為b,內層數為a,**錯誤數為b*2+2,顯然後者要節省更多時間,而且這個時間是很可觀的。a比b越大,這個時間差越明顯

另外,還有一篇部落格是做的demo:

關於這個發表一下自己的感覺

有時候事情不是我們想的那麼簡單,如果不是碰到了這個問題,我還天真的認為誰在裡誰在外對時間是沒有影響的呢,因為他們的時間階都是o(mn),這也讓我深深的感覺到紙上得來終覺淺,絕知此事要躬行。

做工程和研究演算法是不一樣的。

Linux系統shell程式設計for條件迴圈語句

for迴圈語句允許指令碼一次性讀取多個資訊,然後逐一對資訊進行操作處理,有點類似於python裡面for迴圈遍歷的概念,當要處理的資料有範圍時用for語句再合適不過了。語法結構為 for 變數名 in 取值列表 do 命令序列 done 先建立乙個檔案,裡面寫入ip位址 第二行 便利檔案hujian...

python優化迴圈 python中的雙迴圈優化

我正在嘗試優化以下迴圈 def numpy nx,nz,c,rho for ix in range 2,nx 3 for iz in range 2,nz 3 a ix,iz sum c rho ix 1 ix 3,iz b ix,iz sum c rho ix 2 ix 2,iz return a...

高併發系統之大忌 慢查詢

最近又遇到了一次慢查把db mariadb10 幾乎打掛的案例,作為乙個核心支付系統的技術負責人,真是每日如履薄冰。因為之前支付系統經常出問題,現在各個bg對支付系統都盯得很緊。這次要不是我及時讓db給暴力清理資料,沒準又提乙個p2故障 抱怨歸抱怨,事後覆盤,一絲都不能馬虎。首先,描述一下故障的全過...