這篇文章主要介紹在程序開發(fā)中線程數(shù)量如何設置才最合理,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
那么現(xiàn)在有個問題來了,在應用中,針對多線程開發(fā),線程數(shù)量我們要怎么設置才最合理呢?是不是越多越好?
當然不是,在多線程中,不得不提的上下文切換
上下文切換
首先在單核CPU中,也是可以處理多線程的,只是CPU通過給每個線程分配CPU時間片來處理的,假設我們有A、B兩個線程執(zhí)行任務,CPU在非常短的時間(時間片)執(zhí)行A線程,然后再執(zhí)行B線程,如此往復執(zhí)行,不停的切換(切換時保持之前的狀態(tài)),由于時間片的間隙非常短,讓我們感覺是同時執(zhí)行的,即多線程,而這種切換就叫上下文切換。
從上面的描述我們可以知道,上下文切換,必然會出現(xiàn)之前的狀態(tài)保持和啟動,必然會導致性能的損耗,因此多線程的數(shù)量多就不一定快,也就說明了線程數(shù)量不是越多越好。
那么怎么合理的設置線程數(shù)量呢?
多線程任務分類
通常針對多線程一般分為兩類場景:
IO密集型:IO密集型通常指程序運行期間,大部分的耗時是用來進行I/O操作,而這個時間線程不會占用CPU來處理。
CPU密集型:CPU密集型通常是指系統(tǒng)運行時會消耗掉大量的CPU資源,例如需要大量的計算,一些復雜運算,邏輯處理之類的。
因此針對不同場景線程的數(shù)量設置也不一樣
I/O密集型
由于系統(tǒng)運行大部分都是在進行I/O交互,并不會暫用cpu資源,因此可以提高線程數(shù),對線程數(shù)可以用以下計算公式:
最佳線程數(shù) = ((線程等待時間+線程CPU時間)/線程CPU時間 )* CPU核心數(shù)
這樣假設線程無等待,最佳線程數(shù) = 1 * CPU核心數(shù),而實際上線程一般都會存在等待時間,可以保守認為等待時間和線程CPU時間一樣,即 2 * CPU核心數(shù),因此一般都設置為
最佳線程數(shù) = CPU核心數(shù) * 2
CPU密集型
對于CPU密集型的,絕大部分都是利用cpu資源進行計算,因此一般對于此類場景,最佳線程數(shù)量設置為CPU核心線程數(shù)+1,以充分利用多核心CPU的處理能力。
最佳線程數(shù) = CPU核心數(shù) + 1
java獲取cpu核心數(shù)的方法如下:
Runtime.getRuntime().availableProcessors()
以上是“在程序開發(fā)中線程數(shù)量如何設置才最合理”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關知識,歡迎關注億速云行業(yè)資訊頻道!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。