估算線程數有個公式:
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(網卡帶寬, 網絡帶寬) / 單個線程的平均下載下傳速度
如果機器有其他應用,需要預留帶寬,那麼線程數不宜超過此數,防止造成其他應用網絡擁塞