1.高并發、任務執行時間段 的業務使用什麼樣的線程池
2.并發不高、任務執行時間長的的業務怎樣使用線程池
3.并發搞、業務執行時間長的業務怎樣使用線程池
線程池的本質是生産者和消費者模型,包括三要素:
- 往線程隊列中投遞任務的生産者
- 任務池隊列
- 從任務池隊列取出任務執行的worker線程(消費者)
想要合理配置線程池的大小,就要分析線程池任務的特性,可以從以下幾個方面進行分析:
根據任務性質分:
- cpu密集型
- IO密集型
- 混合型任務
根據任務的優先級:
- 高
- 中
- 低
根據任務的執行時間:
- 長
- 中
- 短
不同性質的任務可以交給不同配置的線程池執行:
cpu密集型任務配置盡可能小的線程,如配置cpu個數+1個線程;IO密集型任務應配置盡可能多的線程,因為IO操作不占用cpu,不要讓cpu閑下來,應加大線程的數量,如配置兩倍cpu數量+1個線程;對于混合型的任務,如果可以拆分,拆換成IO密集型和cpu密集型分别處理,如果兩種處理方式時間差距很大則沒必要拆分。
如果任務執行時間長,在worker線程數量有限的情況下,worker很快就被任務占用,導緻後續任務不能及時被處理,此時應增加worker線程數量;反過來,如果任務執行時間短,那麼worker線程數量不用太多,太多的worker線程會導緻過多的時間浪費線上程上下文切換上。