線程池 核心線程數設定公式

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

注:阻塞係數公式

Blocking Coefficient(阻塞係數) = 阻塞時間/(阻塞時間+使用CPU的時間)

 

 

CPU密集型:

          CPU密集型也叫計算密集型,指的是系統的硬盤、內存性能相對CPU要好很多,此時,系統運作大部分的狀況是CPU Loading 100%,CPU要讀/寫I/O(硬盤/內存),I/O在很短的時間就可以完成,而CPU還有許多運算要處理,CPU Loading很高。

在多重程序系統中,大部份時間用來做計算、邏輯判斷等CPU動作的程序稱之CPU bound。例如一個計算圓周率至小數點一千位以下的程序,在執行的過程當中絕大部份時間用在三角函數和開根號的計算,便是屬於CPU bound的程序。

CPU bound的程序一般而言CPU佔用率相當高。這可能是因爲任務本身不太需要訪問I/O設備,也可能是因爲程序是多線程實現因此屏蔽掉了等待I/O的時間

 

IO密集型(I/O bound):

IO密集型指的是系統的CPU性能相對硬盤、內存要好很多,此時,系統運作,大部分的狀況是CPU在等I/O (硬盤/內存) 的讀/寫操作,此時CPU Loading並不高。

I/O bound的程序一般在達到性能極限時,CPU佔用率仍然較低。這可能是因爲任務本身需要大量I/O操作,而pipeline做得不是很好,沒有充分利用處理器能力。

 

 

轉:https://www.cnblogs.com/bobsha/p/6178995.htmlhttps://blog.csdn.net/youanyyou/article/details/78990156

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