關于生產環境如何配置線程數,還是要根據業務來進行區分,我們時常會聽到什么IO密集型、CPU密集型任務...
大家知道什么樣的任務或者代碼會被認定為IO/CPU密集?
又是用什么樣的標準來認定IO/CPU密集?
如果你沒有明確的答案,那么就隨著這篇文章一起來聊一聊吧。
開篇之前我們先來了解下什么是CPU密集型和IO密集型
CPU密集型(CPU-bound)
CPU密集型也叫計算密集型,顧名思義就是應用需要非常多的CPU計算資源,系統運作大部分的狀況是CPU Loading 100%,CPU要讀/寫I/O(硬盤/內存),I/O在很短的時間就可以完成,而CPU還有許多運算要處理,CPU Loading很高。
在多核CPU時代,我們要讓每一個CPU核心都參與計算,將CPU的性能充分利用起來,這樣才算是沒有浪費服務器配置,如果在非常好的服務器配置上還運行著單線程程序那將是多么重大的浪費。
代碼體現:
int n = 0.0
for (i in 0..9999999) {
n = Math.cos(i.toDouble()
)
平常開發應用場景:CPU密集型任務一般來說:計算型代碼、Bitmap轉換、Gson轉換等
IO密集型(I/O bound)
對于IO密集型的應用,就很好理解了,我們現在做的開發大部分都是WEB應用,涉及到大量的網絡傳輸。不僅如此,與數據庫,與緩存間的交互也涉及到IO,一旦發生IO,線程就會處于等待狀態,當IO結束,數據準備好后,線程才會繼續執行。因此從這里可以發現,對于IO密集型的應用,我們可以多設置一些線程池中線程的數量,這樣就能讓在等待的這段時間內,線程可以去做其它事,提高并發處理效率。
代碼體現:
BufferedReader br =new BufferedReader(new FileReader("xxxx"), 1024);
try {
while (br.readLine() != null) {}
} finally {
if (br != null) {
br.close()
}
平常開發應用場景:文件讀寫、DB讀寫、網絡請求等
日常開發中如何優化:
計算密集型任務的特點是要進行大量的計算,消耗CPU資源,比如計算圓周率、對視頻進行高清解碼等等,全靠CPU的運算能力。這種計算密集型任務雖然也可以用多任務完成,但是任務越多,花在任務切換的時間就越多,CPU執行任務的效率就越低。所以,要最高效地利用CPU,計算密集型任務同時進行的數量應當等于CPU的核心數
線程數 = CPU核數+1
也可以設置成CPU核數*2,這還是要看JDK的使用版本,以及CPU配置(服務器的CPU有超線程)。對于JDK1.8來說,里面增加了一個并行計算,計算密集型的較理想線程數 = CPU內核線程數*2
IO密集型,涉及到網絡、磁盤IO的任務都是IO密集型任務,這類任務的特點是CPU消耗很少,任務的大部分時間都在等待IO操作完成(因為IO的速度遠遠低于CPU和內存的速度)。對于IO密集型任務,任務越多,CPU效率越高,但也有一個限度。常見的大部分任務都是IO密集型任務,比如Web應用
線程數 = CPU核心數/(1-阻塞系數)
這個阻塞系數一般為0.8~0.9之間,也可以取0.8或者0.9。套用公式,對于雙核CPU來說,它比較理想的線程數就是20,當然這都不是絕對的,需要根據實際情況以及實際業務來調整。
你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧
網站建設哪家好,找成都創新互聯公司!專注于網頁設計、網站建設、微信開發、重慶小程序開發、集團企業網站建設等服務項目。為回饋新老客戶創新互聯還提供了山城免費建站歡迎大家使用!
新聞標題:4.線程數設置-創新互聯
分享地址:http://m.newbst.com/article40/deheeo.html
成都網站建設公司_創新互聯,為您提供全網營銷推廣、面包屑導航、定制開發、網站導航、網站內鏈、搜索引擎優化
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯