CPU-bound(計算密集型) 和I/O bound(I/O密集型)


I/O bound 指的是系統的CPU效能相對硬盤/內存的效能要好很多,此時,系統運作,大部分的狀況是 CPU 在等 I/O (硬盤/內存) 的讀/寫,此時 CPU Loading 不高。
CPU bound 指的是系統的 硬盤/內存 效能 相對 CPU 的效能 要好很多,此時,系統運作,大部分的狀況是 CPU Loading 100%,CPU 要讀/寫 I/O (硬盤/內存),I/O在很短的時間就可以完成,而 CPU 還有許多運算要處理,CPU Loading 很高。

計算密集型 (CPU-bound) 
在多重程序系統中,大部份時間用來做計算、邏輯判斷等CPU動作的程序稱之CPU bound。例如一個計算圓周率至小數點一千位以下的程序,在執行的過程當中

絕大部份時間用在三角函數和開根號的計算,便是屬於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.

根據以上分析,可以認為通常情況下,大部分程序針對某個特定的性能metric而言
都可分為CPU bound 和 I/O bound兩類。
CPU bound的程序一般而言CPU占用率相當高。這可能是因為任務本身不太需要訪問I/O設備,也可能是因為程序是多線程實現因此屏蔽掉了等待I/O的時間。
而I/O bound的程序一般在達到性能極限時,CPU占用率仍然較低。這可能是因為任務本身需要大量I/O操作,而pipeline做得不是很好,沒有充分利用處理器能力

;還可能是因為數據局部性不是很好,導致較多page error,結果產生了大量disk I/O的開銷。
可能性很多,具體情況具體分析吧。
?
說到如何確定是CPU bound 還是 I/O bound,我一般用top先看達到性能極限時的CPU占用率,然后用sar,iostat等
獲得具體的i/o操作或是page error的統計數據,如果還需要更精准的信息,例如確定具體是哪些代碼產生了這些開銷,則
要用到oprofile或vtune了。
?
通常I/O bound的程序包括web server的靜態頁面訪問,或者是基於數據庫的一些應用等。
而大量計算型的應用都屬於CPU bound吧。
?
最后聊一下如果在一個系統里CPU bound的程序和I/O bound的程序一起run會怎么樣?
應該是CPU bound的程序對CPU的占用率會非常不公平地接近100%吧。因為I/O bound的程序可能一個時間片還沒用完就block了,放棄CPU了。而CPU bound的程序因此而得到了很多調度機會並且每次都能把CPU run完。故在這樣的系統里要給I/O bound的程序更高的優先級使其能被調度得更多些。

 

對於IO密集型程序來說,上層語言的程序運行差異沒有那么大


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM