你知道線程池創(chuàng)建多少線程比較合理嗎?
點擊上方藍色“程序猿DD”,選擇“設為星標”
回復“資源”獲取獨家整理的學習資料!

作者 |?小魚兒_karl
在設置線程池線程個數的時候,經常會想到這個問題,是不是設置的線程數越多越好?理解這個問題之前我們要先清楚的知道我們?yōu)槭裁词褂枚嗑€程。
為什么會使用多線程
使用多線程的主要目的我們應該都能回答的出來就是提高程序的性能,這個提高性能其實是指,降低延遲?指發(fā)送請求到接收到數據的時間,和?提搞吞吐量:單位時間能可以處理更多的請求。 將近延遲和提高吞吐量對應的方法有兩種: 優(yōu)化算法 和 將機器的硬件性能發(fā)揮到極致 1 優(yōu)化算法:降低時間和空間復雜度,使的程序執(zhí)行時間更短。 2 將硬件的性能發(fā)揮到極致,具體的指提高I/O 和cpu的利用率 如何提高I/O 和cpu的利用率的舉例:如果單核系統(tǒng)中 只有一個程序執(zhí)行又有IO操作 和Cpu計算的代碼,當程序執(zhí)行IO操作的時候,Cpu其實是空閑的,反之IO是空閑的,如果這個時候用兩個線程去跑這段代碼,一個線程執(zhí)行IO操作 ,一個線程執(zhí)行Cpu計算 ,這時IO和Cpu的利用率是不是發(fā)揮了極致?
創(chuàng)建多少線程比較合適
經過上面的分析,我們知道創(chuàng)建多少線程能夠將硬件的利用率達到最高才是最好的線程數。我們從線程的應用場景來分析, 由于IO操作比Cpu計算耗時要久的多的,如果我們一段程序有IO操作 和 Cpu計算 我們可以稱之為:IO密集型計算。程序中沒有IO操作 只有Cpu的話 稱之為Cpu密集型程序。
IO密集計算,如何將硬件利用率達到極致呢 我們將 R = IO耗時 / Cpu耗時 我們從上面的例子來看 如果IO耗時/Cpu耗時 = 10 (我們平常可以用工具apm來統(tǒng)計這個比例) 創(chuàng)建線程A 執(zhí)行io操作 我們希望IO操作的時候 Cpu不能閑著 所以就應該創(chuàng)建10個線程去執(zhí)行Cpu計算 當Io操作完畢后剛好Cpu也執(zhí)行完畢 ,他們的利用率都是百分之100 在執(zhí)行這段代碼的時候。這個例子我們要創(chuàng)建 1+ 10 = 11個線程執(zhí)行起來效率更高,于是我們就得到了公式: 1+ I/O耗時/Cpu耗時,如果是多核Cpu 最佳線程數 =CPU 核數 * [ 1 +(I/O 耗時 / Cpu 耗時) Cpu密集型 這個就很簡單了 Cpu的核數 = 線程數就行,一般我們會設置 Cpu核數+1 防止由于其他因素導致線程阻塞等。
結束語
看到這里想必大家在回答創(chuàng)建多個線程比較合理這個問題有了新的思路,希望能夠幫助各位小伙伴
【往期推薦】
2020-11-29
2020-11-29
2020-11-28
2020-11-28
2020-11-27
掃一掃,關注我
一起學習,一起進步
每周贈書,福利不斷
﹀
﹀
﹀
深度內容
推薦加入
評論
圖片
表情




