什么是CPU密集型、IO密集型?
轉(zhuǎn)載自?什么是CPU密集型、IO密集型?
CPU密集型(CPU-bound)
CPU密集型也叫計(jì)算密集型,指的是系統(tǒng)的硬盤、內(nèi)存性能相對CPU要好很多,此時,系統(tǒng)運(yùn)作大部分的狀況是CPU Loading 100%,CPU要讀/寫I/O(硬盤/內(nèi)存),I/O在很短的時間就可以完成,而CPU還有許多運(yùn)算要處理,CPU Loading很高。
在多重程序系統(tǒng)中,大部份時間用來做計(jì)算、邏輯判斷等CPU動作的程序稱之CPU bound。例如一個計(jì)算圓周率至小數(shù)點(diǎn)一千位以下的程序,在執(zhí)行的過程當(dāng)中絕大部份時間用在三角函數(shù)和開根號的計(jì)算,便是屬于CPU bound的程序。
CPU bound的程序一般而言CPU占用率相當(dāng)高。這可能是因?yàn)槿蝿?wù)本身不太需要訪問I/O設(shè)備,也可能是因?yàn)槌绦蚴嵌嗑€程實(shí)現(xiàn)因此屏蔽掉了等待I/O的時間。
IO密集型(I/O bound)
IO密集型指的是系統(tǒng)的CPU性能相對硬盤、內(nèi)存要好很多,此時,系統(tǒng)運(yùn)作,大部分的狀況是CPU在等I/O (硬盤/內(nèi)存) 的讀/寫操作,此時CPU Loading并不高。
I/O bound的程序一般在達(dá)到性能極限時,CPU占用率仍然較低。這可能是因?yàn)槿蝿?wù)本身需要大量I/O操作,而pipeline做得不是很好,沒有充分利用處理器能力。
CPU密集型 vs IO密集型
我們可以把任務(wù)分為計(jì)算密集型和IO密集型。
計(jì)算密集型任務(wù)的特點(diǎn)是要進(jìn)行大量的計(jì)算,消耗CPU資源,比如計(jì)算圓周率、對視頻進(jìn)行高清解碼等等,全靠CPU的運(yùn)算能力。這種計(jì)算密集型任務(wù)雖然也可以用多任務(wù)完成,但是任務(wù)越多,花在任務(wù)切換的時間就越多,CPU執(zhí)行任務(wù)的效率就越低,所以,要最高效地利用CPU,計(jì)算密集型任務(wù)同時進(jìn)行的數(shù)量應(yīng)當(dāng)?shù)扔贑PU的核心數(shù)。
計(jì)算密集型任務(wù)由于主要消耗CPU資源,因此,代碼運(yùn)行效率至關(guān)重要。Python這樣的腳本語言運(yùn)行效率很低,完全不適合計(jì)算密集型任務(wù)。對于計(jì)算密集型任務(wù),最好用C語言編寫。
第二種任務(wù)的類型是IO密集型,涉及到網(wǎng)絡(luò)、磁盤IO的任務(wù)都是IO密集型任務(wù),這類任務(wù)的特點(diǎn)是CPU消耗很少,任務(wù)的大部分時間都在等待IO操作完成(因?yàn)镮O的速度遠(yuǎn)遠(yuǎn)低于CPU和內(nèi)存的速度)。對于IO密集型任務(wù),任務(wù)越多,CPU效率越高,但也有一個限度。常見的大部分任務(wù)都是IO密集型任務(wù),比如Web應(yīng)用。
IO密集型任務(wù)執(zhí)行期間,99%的時間都花在IO上,花在CPU上的時間很少,因此,用運(yùn)行速度極快的C語言替換用Python這樣運(yùn)行速度極低的腳本語言,完全無法提升運(yùn)行效率。對于IO密集型任務(wù),最合適的語言就是開發(fā)效率最高(代碼量最少)的語言,腳本語言是首選,C語言最差。
總之,計(jì)算密集型程序適合C語言多線程,I/O密集型適合腳本語言開發(fā)的多線程。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎
總結(jié)
以上是生活随笔為你收集整理的什么是CPU密集型、IO密集型?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 分布式ID生成器的解决方案总结
- 下一篇: Maven Optional Excl