高併發之——高併發場景下創建多少線程才合適?一條公式幫你搞定!!

創建多少線程合適, 要看多線程具體的應用場景。 一般來說,我們可以將程序分爲:CPU密集型程序和I/O密集型程序, 而針對於CPU密集型程序和I/O密集型程序,其計算最佳線程數的方法是不同的 。

CPU密集型程序

對於CPU密集型計算, 多線程本質上是提升多核CPU的利用率, 所以對於一個4核的CPU, 每個核一個線程, 理論上創建4個線程就可以了, 再多創建線程也只是增加線程切換的成本。 所以, 對於CPU密集型的計算場景, 理論上“線程的量=CPU核數”就是最合適的。 但是在實際工作中, 一般會將線程數量設置爲“CPU核數+1”, 這樣的話, 當線程因爲偶爾的內存頁失效或其他原因導致阻塞時, 這個額外的線程可以頂上, 從而保證CPU的利用率 。

所以,在CPU密集型的程序中,一般可以將線程數設置爲CPU核數+1。

I/O密集型程序

對於I/O密集型的程序,最佳的線程數是與程序中CPU計算和I/O操作的耗時比相關。總體來說,可以將其總結爲如下的公式。

單核CPU

最佳線程數 = 1 +(I/O耗時 / CPU耗時)

我們令R=I/O耗時 / CPU耗時, 可以這樣理解: 當線程A執行IO操作時, 另外R個線程正好執行完各自的CPU計算。 這樣CPU的利用率就達到了100%。

多核CPU

多核CPU的最佳線程數在單核CPU最佳線程數的基礎上,乘以CPU核數即可,如下所示。

最佳線程數=CPU核數 * [ 1 +(I/O耗時 / CPU耗時) ]

總結

上述公式計算的結果爲最佳理論值,實際工作中還是要通過實際壓測數據來找到最佳線程數,將硬件的性能發揮到極致。

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