創建線程池時如何確定線程數目

對於線程池的介紹已經在上一篇文章中介紹完畢,那麼對於創建線程池時如何確定線程數目,是一個值得思考和關注的問題。
首先根據查閱資料得知:線程池中線程的數目是跟線程池所要處理的任務性質有關,也就是說線程的數目確定是受影響於 任務是屬於 CPU密集型任務 還是 IO密集型任務

CPU密集型(CPU-bound)
CPU密集型也叫計算密集型,指的是系統花費相對大部分時間在做CPU運算、邏輯判斷等,CPU使用率很高,典型的如加密運算。一般來說:大量純計算就是 CPU 密集型。

IO密集型(I/O bound)
IO密集型指的是系統花費大部分時間在等待相對較慢的I/O操作完成,如硬盤文件的讀寫。一般來說:大量網絡,文件操作就是 io 密集型

瞭解了什麼 CPU密集型和IO密集型後,我們可以按照下面的步驟確定線程數:

1.先看下機器的CPU核數,然後在設定具體參數:
System.out.println(Runtime.getRuntime().availableProcessors());
即 CPU核數 = Runtime.getRuntime().availableProcessors()

2.分析下線程池處理的程序是CPU密集型,還是IO密集型
CPU密集型:核心線程數 = CPU核數 + 1
IO密集型:核心線程數 = CPU核數 * 2

注:IO密集型(某大廠實踐經驗)

   核心線程數 = CPU核數 / (1-阻塞係數)     例如阻塞係數 0.8,CPU核數爲4

   則核心線程數爲20
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章