我們常常會問多執行緒相關知識,那麼執行緒池的設定問題就避免不了,那麼,我們應該怎麼回答或者怎麼思考解決這個問題呢?
其實這個問題反映的是如何設定使得計算機資源利用率最大化。
我們回答的時候可以說:
為了提高 cpu 的利用率
,一般我們可以設定執行緒池的為cpu核心數或者核心數的2倍。
執行緒池的理想大小 取決於提交任務的型別以及所部署系統的特性,不應該在程式中寫死,
執行緒等待時間所佔比例越高,需要越多執行緒。執行緒cpu時間所佔比例越高,需要越少執行緒
我們要根據任務是 :計算密集型 or i/o密集型
來設定執行緒池的大小。
計算密集型
是指處理這種任務時,執行緒不會發生阻塞,執行緒不阻塞就一定程度代表 cpu 一直在忙碌;
i/o 密集型
是指執行該類任務時執行緒多會發生阻塞,一旦阻塞,cpu 就多被閒置,浪費 cpu 資源。
通俗的說:
當是i/o密集性時,等待時間更長,需要執行緒數就更多,所以我們可以設定為2倍,
而計算機密集型,執行速度很快,但是不停的執行,基本上cpu都是滿負荷執行,那麼核心數即執行緒數就更為合適。
如何合理設定執行緒池大小
要想合理的配置執行緒池的大小,首先得分析任務的特性,可以從以下幾個角度分析 任務的性質 cpu密集型任務 io密集型任務 混合型任務。任務的優先順序 高 中 低。任務的依賴性 是否依賴其他系統資源,如資料庫連線等。性質不同的任務可以交給不同規模的執行緒池執行。對於不同性質的任務來說,cpu密集型任務...
如何合理設定執行緒池大小
這個問題雖然看起來很小,卻並不那麼容易回答。大家如果有更好的方法歡迎賜教,先來乙個天真的估算方法 假設要求乙個系統的tps transaction per second或者task per second 至少為20,然後假設每個transaction由乙個執行緒完成,繼續假設平均每個執行緒處理乙個t...
執行緒池 合理的設定大小
直接建立大量執行緒的壞處 對於乙個web伺服器,伺服器應用程式會處理來自客戶端的請求。假設,每到達乙個請求,我們的程式都為該請求建立乙個執行緒來執行請求任務,那麼這個建立的執行緒數目將會是無窮無盡的,為每乙個請求任務分配乙個執行緒 該做法是存在一些缺陷的,尤其是建立大量執行緒時 1 執行緒的生命週期...