CPU-bound(计算密集型) 和I/O bound(I/O密集型)
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
IO bound 指的是系統(tǒng)的CPU效能相對(duì)硬盤(pán)/內(nèi)存的效能要好很多,此時(shí),系統(tǒng)運(yùn)作,大部分的狀況是 CPU 在等 I/O (硬盤(pán)/內(nèi)存) 的讀/寫(xiě),此時(shí) CPU Loading 不高。
CPU bound 指的是系統(tǒng)的 硬盤(pán)/內(nèi)存 效能 相對(duì) CPU 的效能 要好很多,此時(shí),系統(tǒng)運(yùn)作,大部分的狀況是 CPU Loading 100%,CPU 要讀/寫(xiě) I/O (硬盤(pán)/內(nèi)存),I/O在很短的時(shí)間就可以完成,而 CPU 還有許多運(yùn)算要處理,CPU Loading 很高。
計(jì)算密集型 (CPU-bound)?
在多重程序系統(tǒng)中,大部份時(shí)間用來(lái)做計(jì)算、邏輯判斷等CPU動(dòng)作的程序稱之CPU bound。例如一個(gè)計(jì)算圓周率至小數(shù)點(diǎn)一千位以下的程序,在執(zhí)行的過(guò)程當(dāng)中
絕大部份時(shí)間用在三角函數(shù)和開(kāi)根號(hào)的計(jì)算,便是屬于CPU bound的程序。
It is because the performance characteristic of most protocol codec implementations is CPU-bound, which is the same with I/O processor threads.
根據(jù)以上分析,可以認(rèn)為通常情況下,大部分程序針對(duì)某個(gè)特定的性能metric而言
都可分為CPU bound 和 I/O bound兩類。
CPU bound的程序一般而言CPU占用率相當(dāng)高。這可能是因?yàn)槿蝿?wù)本身不太需要訪問(wèn)I/O設(shè)備,也可能是因?yàn)槌绦蚴嵌嗑€程實(shí)現(xiàn)因此屏蔽掉了等待I/O的時(shí)間。
而I/O bound的程序一般在達(dá)到性能極限時(shí),CPU占用率仍然較低。這可能是因?yàn)槿蝿?wù)本身需要大量I/O操作,而pipeline做得不是很好,沒(méi)有充分利用處理器能力;還可能是因?yàn)閿?shù)據(jù)局部性不是很好,導(dǎo)致較多page error,結(jié)果產(chǎn)生了大量disk I/O的開(kāi)銷。
可能性很多,具體情況具體分析吧。
說(shuō)到如何確定是CPU bound 還是 I/O bound,我一般用top先看達(dá)到性能極限時(shí)的CPU占用率,然后用sar,iostat等,獲得具體的i/o操作或是page error的統(tǒng)計(jì)數(shù)據(jù),如果還需要更精準(zhǔn)的信息,例如確定具體是哪些代碼產(chǎn)生了這些開(kāi)銷,則要用到oprofile或vtune了。
通常I/O bound的程序包括web server的靜態(tài)頁(yè)面訪問(wèn),或者是基于數(shù)據(jù)庫(kù)的一些應(yīng)用等。
而大量計(jì)算型的應(yīng)用都屬于CPU bound吧。
最后聊一下如果在一個(gè)系統(tǒng)里CPU bound的程序和I/O bound的程序一起run會(huì)怎么樣?
應(yīng)該是CPU bound的程序?qū)PU的占用率會(huì)非常不公平地接近100%吧。因?yàn)镮/O bound的程序可能一個(gè)時(shí)間片還沒(méi)用完就block了,放棄CPU了。而CPU bound的程序因此而得到了很多調(diào)度機(jī)會(huì)并且每次都能把CPU run完。故在這樣的系統(tǒng)里要給I/O bound的程序更高的優(yōu)先級(jí)使其能被調(diào)度得更多些。
?
轉(zhuǎn)載于:https://my.oschina.net/wangande2014/blog/673898
總結(jié)
以上是生活随笔為你收集整理的CPU-bound(计算密集型) 和I/O bound(I/O密集型)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【Linux】debian jessie
- 下一篇: jquery选中