CPU-bound(计算密集型) 和I/O bound(I/O密集型)
2019獨角獸企業(yè)重金招聘Python工程師標準>>>
IO bound 指的是系統(tǒng)的CPU效能相對硬盤/內存的效能要好很多,此時,系統(tǒng)運作,大部分的狀況是 CPU 在等 I/O (硬盤/內存) 的讀/寫,此時 CPU Loading 不高。
 CPU bound 指的是系統(tǒng)的 硬盤/內存 效能 相對 CPU 的效能 要好很多,此時,系統(tǒng)運作,大部分的狀況是 CPU Loading 100%,CPU 要讀/寫 I/O (硬盤/內存),I/O在很短的時間就可以完成,而 CPU 還有許多運算要處理,CPU Loading 很高。
計算密集型 (CPU-bound)?
 在多重程序系統(tǒng)中,大部份時間用來做計算、邏輯判斷等CPU動作的程序稱之CPU bound。例如一個計算圓周率至小數點一千位以下的程序,在執(zhí)行的過程當中
絕大部份時間用在三角函數和開根號的計算,便是屬于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的統(tǒng)計數據,如果還需要更精準的信息,例如確定具體是哪些代碼產生了這些開銷,則要用到oprofile或vtune了。
 通常I/O bound的程序包括web server的靜態(tài)頁面訪問,或者是基于數據庫的一些應用等。
 而大量計算型的應用都屬于CPU bound吧。
 最后聊一下如果在一個系統(tǒng)里CPU bound的程序和I/O bound的程序一起run會怎么樣?
 應該是CPU bound的程序對CPU的占用率會非常不公平地接近100%吧。因為I/O bound的程序可能一個時間片還沒用完就block了,放棄CPU了。而CPU bound的程序因此而得到了很多調度機會并且每次都能把CPU run完。故在這樣的系統(tǒng)里要給I/O bound的程序更高的優(yōu)先級使其能被調度得更多些。
 ?
轉載于:https://my.oschina.net/wangande2014/blog/673898
總結
以上是生活随笔為你收集整理的CPU-bound(计算密集型) 和I/O bound(I/O密集型)的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 【Linux】debian jessie
- 下一篇: jquery选中
