java執行緒池如何合理的設定大小

2021-09-11 23:32:40 字數 543 閱讀 6903

任務一般分為: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密集型任務...