結論:執行緒等待時間所佔比例越高,需要越多執行緒。執行緒cpu時間所佔比例越高,需要越少執行緒(防止過多的上下文切換)。
最佳執行緒數目 = (執行緒等待時間與執行緒cpu時間之比 + 1)* cpu數目
答案是否定的,比如redis就是單執行緒的,但它卻非常高效,基本操作都能達到十萬量級/s。從執行緒這個角度來看,部分原因在於:
1.多執行緒帶來執行緒上下文切換開銷,單執行緒就沒有這種開銷
2.鎖
當然「redis很快」更本質的原因在於:redis基本都是記憶體操作,這種情況下單執行緒可以很高效地利用cpu。而多執行緒適用場景一般是:存在相當比例的io和網路操作。
所以當要用多執行緒需要結合系統真實情況(比如是io密集型或者是cpu密集型或者是純記憶體操作)和硬體環境(cpu、記憶體、硬碟讀寫速度、網路狀況等)來不斷嘗試達到乙個符合實際的合理估算值。
執行緒池應該設定多少才合理
我們常常會問多執行緒相關知識,那麼執行緒池的設定問題就避免不了,那麼,我們應該怎麼回答或者怎麼思考解決這個問題呢?其實這個問題反映的是如何設定使得計算機資源利用率最大化。我們回答的時候可以說 為了提高 cpu 的利用率,一般我們可以設定執行緒池的為cpu核心數或者核心數的2倍。執行緒池的理想大小 取...
執行緒池 合理的設定大小
直接建立大量執行緒的壞處 對於乙個web伺服器,伺服器應用程式會處理來自客戶端的請求。假設,每到達乙個請求,我們的程式都為該請求建立乙個執行緒來執行請求任務,那麼這個建立的執行緒數目將會是無窮無盡的,為每乙個請求任務分配乙個執行緒 該做法是存在一些缺陷的,尤其是建立大量執行緒時 1 執行緒的生命週期...
如何配置執行緒池大小
參考文件 一般需要根據任務的型別來配置執行緒池大小 如果是cpu密集型任務,就需要盡量壓榨cpu,參考值可以設為 ncpu 1 如果是io密集型任務,參考值可以設定為2 ncpu 當然,這只是乙個參考值,具體的設定還需要根據實際情況進行調整,比如可以先將執行緒池大小設定為參考值,再觀察任務運 況和系...