天天看點

如何估算線程池的線程數?

估算線程數有個公式:

threadNum = (1 + (ioTime / cpuTime)) * coreNum

coreNum:cpu核心數

cpuTime:cpu運轉時間,計算方式:注釋io操作,mock結果,邏輯執行完的時間

allTime:所有邏輯正常執行的時間

ioTime = allTime - cpuTime;

推導:如果想最大化的利用cpu,就需要盡量減少cpu等待的時間,那麼(1 + (ioTime / cpuTime)) * coreNum便是理想情況下線程數量,執行情況如下圖:

如何估算線程池的線程數?

帶入公式:(1 + (ioTime / cpuTime)) * coreNum = threadNum

如果線程數量為(1 + (3 / 1)) * 1 = 4時,可以最大化利用cpu

threadNum = min(網卡帶寬, 網絡帶寬) / 單個線程的平均下載下傳速度

如果機器有其他應用,需要預留帶寬,那麼線程數不宜超過此數,防止造成其他應用網絡擁塞

繼續閱讀