執行緒池使用 CPU密集型和IO密集型

2021-10-08 10:25:53 字數 809 閱讀 8646

cpu使用率較高(也就是一些複雜運算,邏輯處理),所以執行緒數一般只需要cpu核數的執行緒就可以了。 這一型別的在開發中多出現的一些業務複雜計算和邏輯處理過程中。

cpu使用率較低,程式中會存在大量i/o操作佔據時間,導致執行緒空餘時間出來,所以通常就需要開cpu核數的兩倍的執行緒, 當執行緒進行i/o操作cpu空暇時啟用其他執行緒繼續使用cpu,提高cpu使用率 通過上述可以總結出:執行緒的最佳數量: 最佳執行緒數目 = ((執行緒等待時間+執行緒cpu時間)/執行緒cpu時間 )* cpu數目 執行緒等待時間所佔比例越高,需要越多執行緒。執行緒cpu時間所佔比例越高,需要越少執行緒。這一型別在開發中主要出現在一些讀寫操作頻繁的業務邏輯中。

開發中我們經常會使用到執行緒池來處理一些業務,而在不新增裝置的情況下,我們所能使用的執行緒資源又不是無線的,那麼高併發、任務執行時間短的業務怎樣使用執行緒池?還有併發不高、任務執行時間長的業務怎樣使用執行緒池?併發高、業務執行時間長的業務怎樣使用執行緒池?

接下來我們進行一一分析:

1:高併發、任務執行時間短的業務,執行緒池執行緒數可以設定為cpu核數+1,減少執行緒上下文的切換

2:併發不高、任務執行時間長的業務這就需要區分開看了:

a)假如是業務時間長集中在io操作上,也就是io密集型的任務,因為io操作並不占用cpu,所以不要讓所有的cpu閒下來,可以適當加大執行緒池中的執行緒數目,讓cpu處理更多的業務

b)假如是業務時間長集中在計算操作上,也就是計算密集型任務,這個就沒辦法了,和(1)一樣吧,執行緒池中的執行緒數設定得少一些,減少執行緒上下文的切換

(其實從一二可以看出無論併發高不高,對於業務中是否是cpu密集還是i/o密集的判斷都是需要的當前前提是你需要優化效能的前提下)

CPU 密集型 計算密集型,IO密集型

1 cpu 密集型 計算密集型 計算密集型,顧名思義就是應用需要非常多的cpu計算資源,在多核cpu時代,我們要讓每乙個cpu核心都參與計算,將cpu的效能充分利用起來,這樣才算是沒有浪費伺服器配置,如果在非常好的伺服器配置上還執行著單執行緒程式那將是多麼重大的浪費。對於計算密集型的應用,完全是靠c...

CPU密集型和I O密集型區別

cpu密集型 i o密集型 有一些程序則在input 和output上花費了大多時間,稱為i o密集型,i o bound。比如搜尋引擎蜘蛛大多時間是在等待相應這種就屬於i o密集型。nodejs 眾所周知node.js是單執行緒的,正常來說nodejs處理cpu密集型就比較乏力,畢竟只有一條執行緒...

CPU計算密集型和IO密集型

cpu計算密集型和io密集型 計算密集型任務由於主要消耗cpu資源,因此,執行效率至關重要。python這樣的指令碼語言執行效率很低,完全不適合計算密集型任務。對於計算密集型任務,最好用c語言編寫。第二種任務的型別是io密集型,涉及到網路 磁碟io的任務都是io密集型任務,這類任務的特點是cpu消耗...