執行緒數大小和CPU密集型和I O密集型

2021-09-13 03:33:23 字數 497 閱讀 9503

乙個程式究竟應該設計多少執行緒數,應該從併發模型來考慮

cpu密集型

cpu密集型就是需要消耗大量cpu運算的服務,這個時候,如果執行緒數大,會增加cpu的上下文切換,但是執行緒數不能太少,面對cpu密集型,可以從2*cpu 和 cpu+1兩個資料去除錯執行緒數的大小。

i/o密集型

i/o密集型就是要頻繁進行i/o請求,很多時候就是隨機i/o的讀寫請求,這個時候,增加執行緒,如果是增加處理i/o請求的執行緒數,其實並不能解決問題,因為大併發的時候,還是會卡住執行緒,從而執行緒池中可用執行緒全部被耗盡,這會導致連鎖反應,就是把新進來的請求因為沒有可用的執行緒導致被迫等待,處理i/o密集型,其實用來提交i/o請求的執行緒只需要少量就可以,執行緒存在其實就是為了提交i/o請求和相應i/o請求,從這個本質上講,執行緒在i/o請求中做的工作只是在各種i/o裝置中提交命令。因為也只需要少量執行緒就可以,典型的應用就是nodejs和nginx,這兩款應用就是少量執行緒和程序的服務,但是確實高併發處理i/o請求的典範。但是非同步i/o需要底層作業系統支援。

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

cpu使用率較高 也就是一些複雜運算,邏輯處理 所以執行緒數一般只需要cpu核數的執行緒就可以了。這一型別的在開發中多出現的一些業務複雜計算和邏輯處理過程中。cpu使用率較低,程式中會存在大量i o操作佔據時間,導致執行緒空餘時間出來,所以通常就需要開cpu核數的兩倍的執行緒,當執行緒進行i o操作...

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消耗...