首先要明白多執行緒在單核和多核cpu的執行機制:
多執行緒在單核cpu執行時,同一時間只能處理乙個執行緒,系統會切換執行緒,給每個執行緒分配時間片來跑。
由於執行緒間的切換會增加系統的開銷,所以多執行緒在多核cpu上跑時,除了能夠在同一時間處理多個執行緒,還能避免執行緒間切換帶來的開銷。
乙個計算量很大的程式(也稱作cpu密集型程式),多執行緒跑的時候,不存在阻塞的情況,可以充分利用所有的cpu的核。
假如當前cpu只有四核,要使程式執行的效率最高,需使執行緒池的容量為4,同時跑4個執行緒的計算任務。如果小於4,則cpu的四核得不到最大利用率,如果大於4,cpu會進行執行緒間的切換,會有多餘的開銷。
當執行緒數超過cpu核心數時,cpu會通過分配時間片的方式來排程執行緒,如果某個執行緒發生阻塞,會切換執行其他執行緒。
所以理論上說,執行緒數等於io程式數是最佳的。
CPU 密集型 計算密集型,IO密集型
1 cpu 密集型 計算密集型 計算密集型,顧名思義就是應用需要非常多的cpu計算資源,在多核cpu時代,我們要讓每乙個cpu核心都參與計算,將cpu的效能充分利用起來,這樣才算是沒有浪費伺服器配置,如果在非常好的伺服器配置上還執行著單執行緒程式那將是多麼重大的浪費。對於計算密集型的應用,完全是靠c...
cpu密集型 計算密集型 io密集型 簡介
cpu密集型 cpu bound cpu密集型也叫計算密集型,指的是系統的硬碟 記憶體效能相對cpu要好很多,此時,系統運作大部分的狀況是cpu loading 100 cpu要讀 寫i o 硬碟 記憶體 i o在很短的時間就可以完成,而cpu還有許多運算要處理,cpu loading很高。在多重程...
CPU密集型和I O密集型區別
cpu密集型 i o密集型 有一些程序則在input 和output上花費了大多時間,稱為i o密集型,i o bound。比如搜尋引擎蜘蛛大多時間是在等待相應這種就屬於i o密集型。nodejs 眾所周知node.js是單執行緒的,正常來說nodejs處理cpu密集型就比較乏力,畢竟只有一條執行緒...