恰巧遇見這中問題,故將網上帖子整理下~
整理如下///s
乙個程序如果是死迴圈,那麼占有的cpu會很高,可是作業系統時間片執行的,到了一定時間不是會自動切換到別的程序嗎?即便是死迴圈,到時間還是會切換到別的程序,為什麼占用cpu會高呢?
死迴圈的時候程式不像其它的程式那樣可能在某處被阻塞,比如sleep了,等io了....這些可能被阻塞的程式在程序睡眠期間都不會被喚醒的,不會占用cpu的,而死迴圈則不會讓出cpu,所以表現出cpu佔用率高.
這種死迴圈一般是使用者層的計算,沒有呼叫系統呼叫,除了時間片到期外,陷入核心(通過呼叫系統呼叫)也是會引起程序排程的。死迴圈程式少了這個。
死迴圈不會讓出cpu,但是作業系統的排程模組會對所有的程序進行相應的排程,只要時間片用完了,也會將其放到核心程序的等待佇列中去的。
[quote]原帖由 [i]cugb_cat[/i] 於 2009-11-14 01:51 發表 [url=http://bbs2.chinaunix.net/redirect.php?goto=findpost&pid=11470198&ptid=1613560][img]http://bbs2.chinaunix.net/images/common/back.gif[/img][/url]
這種死迴圈一般是使用者層的計算,沒有呼叫系統呼叫,除了時間片到期外,陷入核心(通過呼叫系統呼叫)也是會引起程序排程的。死迴圈程式少了這個。 [/quote]
對,只是少了排程的機會
為什麼cpu佔用率非常高
乙個簡單的點燈任何ledtask,看起來cpu佔用率不高,但在這個任務起來後,整個系統的cpu佔用率會變得很高。經查,原因是這段code char cmd 64 sprintf cmd,opt ipnc gpiotst d setmode out pin system cmd sprintf cmd...
為什麼會陷入死迴圈
看似簡單的一段程式如下 int main 在unix linux平台下,gcc編譯執行會陷入死迴圈.因為變數 i 和陣列 j 8 是儲存在棧中,預設是由高位址向低位址方向儲存.輸出變數位址可以發現 i 儲存位置在0xbfd90dec,j 0 j 1 j 7 在記憶體的位址分別是0xbfdab05c ...
Java while迴圈cpu占用高排查和優化
放幾個阿里雲的優惠鏈結 代金券 高效能伺服器2折起 高效能伺服器5折 命令列工具的功能都很強大,像jmap jstat jstack jps這些,功能和一些收費軟體差不多,但是沒有gui看起來就有些費勁。由於使用windows分析就使用自帶的jmc來用了,只要在命令列輸入jmc就可以啟動。由於已經知...