1、不同種類的線程池都適用什么場景呢?
2、選擇的關鍵點是:1 盡量減少線程切換和管理的開支,2最大化利用cpu
3、並發比較高,耗時比較短的任務
- 這種場景適合線程盡量少,因為如果線程太多,任務執行時間段很快就執行完了,有可能出現線程切換和管理多耗費的時間,大於任務執行的時間,這樣效率就低了。線程池線程數可以設置為CPU核數+1
4、並發比較低,耗時比較長的任務
- a) IO密集型:假如是業務時間長集中在IO操作上,也就是IO密集型的任務,因為IO操作並不占用CPU,所以可以加大線程池中的線程數目,這樣一個io任務可能會執行很長時間,所以在執行io操作時它的cpu可以讓出來去執行別的任務,讓CPU處理更多的業務。線程池線程數可以設置為CPU核數*2
- b) 計算密集型: 假如是業務時間長集中在計算操作上,也就是計算密集型任務,這個操作也需要使用cpu的,如果線程太多並且每個任務又特別耗時不但會影響其他業務,嚴重時還會導致cpu飆升100%,所以線程數不宜太多
5、並發高,耗時長的任務
- 解決這種類型任務的關鍵不在於線程池而在於整體架構的設計
- 首先第一步:看看這些業務里面某些數據是否能做緩存
- 第二步:看看能否把這些高並發,耗時長的任務能不能拆分成。高並發,低耗時,或者低並發,高耗時的場景
- 第三步:增加服務器數量,增加計算單元。