創(chuàng)建多少線程才是合適的?

多線程的應(yīng)用場景
要解決這個問題,首先要分析以下兩個問題:

1 為什么要使用多線程?

使用多線程,本質(zhì)上就是提升程序性能,最核心的就是降低延遲和提升吞吐量。

2 多線程的應(yīng)用場景

在并發(fā)編程領(lǐng)域,提升性能本質(zhì)上就是提升硬件的利用率,再具體點(diǎn)來說,就是提升 I/O 的利用率和 CPU 的利用率。

創(chuàng)建多少線程合適?

創(chuàng)建多少線程合適,要看多線程具體的應(yīng)用場景。I/O 密集型程序和 CPU 密集型程序,計算最佳線程數(shù)的方法是不同的。

CPU 密集型計算

對于 CPU 密集型計算,多線程本質(zhì)上是提升多核 CPU 的利用率,所以對于一個 4 核的 CPU,每個核一個線程,理論上創(chuàng)建 4 個線程就可以了,再多創(chuàng)建線程也只是增加線程切 換的成本。所以,對于 CPU 密集型的計算場景,理論上“線程的數(shù)量 =CPU * 核數(shù)”就是最合適的。不過在工程上,線程的數(shù)量一般會設(shè)置為“CPU 核數(shù) +1”,這樣的話,當(dāng)線 程因為偶爾的內(nèi)存頁失效或其他原因?qū)е伦枞麜r,這個額外的線程可以頂上,從而保證 CPU 的利用率。

CPU 密集型計算

最佳線程數(shù) =CPU 核數(shù) * [ 1 +(I/O 耗時 / CPU 耗時)]
對于 I/O 密集型計算場景,I/O 耗時和 CPU 耗時的比值是一個關(guān)鍵參數(shù),不幸的是這個參數(shù)是未知的,而且是動態(tài)變化的,所以工程上,我們要估算這個參數(shù),然后做各種不同場景 下的壓測來驗證我們的估計。不過工程上,原則還是將硬件的性能發(fā)揮到極致,所以壓測時,我們需要重點(diǎn)關(guān)注 CPU、I/O 設(shè)備的利用率和性能指標(biāo)(響應(yīng)時間、吞吐量)之間的 關(guān)系。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容