任務一般分為:cpu密集型、io密集型、混合型,對於不同型別的任務需要分配不同大小的執行緒池
1、cpu密集型
盡量使用較小的執行緒池,一般cpu核心數+1
因為cpu密集型任務cpu的使用率很高,若開過多的執行緒,只能增加執行緒上下文的切換次數,帶來額外的開銷
2、io密集型
方法一:可以使用較大的執行緒池,一般cpu核心數 * 2
io密集型cpu使用率不高,可以讓cpu等待io的時候處理別的任務,充分利用cpu時間
方法二:執行緒等待時間所佔比例越高,需要越多執行緒。執行緒cpu時間所佔比例越高,需要越少執行緒。
下面舉個例子:
比如平均每個執行緒cpu執行時間為0.5s,而執行緒等待時間(非cpu執行時間,比如io)為1.5s,cpu核心數為8,那麼根據上面這個公式估算得到:((0.5+1.5)/0.5)8=32。這個公式進一步轉化為:
最佳執行緒數目 = (執行緒等待時間與執行緒cpu時間之比 + 1) cpu數目
3、混合型
可以將任務分為cpu密集型和io密集型,然後分別使用不同的執行緒池去處理,按情況而定
如何合理設定執行緒池大小
要想合理的配置執行緒池的大小,首先得分析任務的特性,可以從以下幾個角度分析 任務的性質 cpu密集型任務 io密集型任務 混合型任務。任務的優先順序 高 中 低。任務的依賴性 是否依賴其他系統資源,如資料庫連線等。性質不同的任務可以交給不同規模的執行緒池執行。對於不同性質的任務來說,cpu密集型任務...
如何合理設定執行緒池大小
這個問題雖然看起來很小,卻並不那麼容易回答。大家如果有更好的方法歡迎賜教,先來乙個天真的估算方法 假設要求乙個系統的tps transaction per second或者task per second 至少為20,然後假設每個transaction由乙個執行緒完成,繼續假設平均每個執行緒處理乙個t...
如何合理設定執行緒池大小
要想合理的配置執行緒池的大小,首先得分析任務的特性,可以從以下幾個角度分析 任務的性質 cpu密集型任務 io密集型任務 混合型任務。任務的優先順序 高 中 低。任務的依賴性 是否依賴其他系統資源,如資料庫連線等。性質不同的任務可以交給不同規模的執行緒池執行。對於不同性質的任務來說,cpu密集型任務...