共同本質:
阻塞:(被動)
掛起(主動)
睡眠(主動)
共同本質:
正在執(zhí)行的進程/線程柑晒,由于某些原因(主欧瘪、被動)釋放CPU,暫停執(zhí)行
(這里討論的均是處于運行狀態(tài)的進/線程)
阻塞:(被動)
進/線程被動暫停執(zhí)行匙赞,阻塞的進程仍處于內存中佛掖,OS把處理機分配給另一個就緒進程,而讓被暫停的進程處于暫停狀態(tài)涌庭。
(自動)阻塞恢復:需要在等待的資源得到滿足(例如獲得了鎖)后芥被,才會進入就緒狀態(tài),等待被調度而執(zhí)行坐榆。
阻塞原因:
進程:進程由于提出系統(tǒng)服務請求(如I/O操作)拴魄,但因為某種原因未得到操作系統(tǒng)的立即響應,或者需要從其他合作進程獲得的數據尚未到達等原因席镀。
線程:線程鎖問題匹中。
掛起(主動)
用戶主動暫停執(zhí)行進/線程,掛起的進程被換出到外存(磁盤)中豪诲。
掛起恢復:需要用戶主動控制顶捷,掛起時線程不會釋放對象鎖。
掛起原因:
? ? ? ? ? 終端用戶的請求屎篱。當終端用戶在自己的程序運行期間發(fā)現有可疑問題時服赎,希望暫停使自己的程序靜止下來。亦即交播,使正在執(zhí)行的進程暫停執(zhí)行专肪;若此時用戶進程正處于就緒狀態(tài)而未執(zhí)行,則該進程暫不接受調度堪侯,以便用戶研究其執(zhí)行情況或對程序進行修改嚎尤。我們把這種靜止狀態(tài)成為“掛起狀態(tài)”。
? ? ? ? ? 父進程的請求伍宦。有時父進程希望掛起自己的某個子進程芽死,以便考察和修改子進程乏梁,或者協(xié)調各子進程間的活動。
? ? ? ? ? 負荷調節(jié)的需要关贵。當實時系統(tǒng)中的工作負荷較重遇骑,已可能影響到對實時任務的控制時,可由系統(tǒng)把一些不重要的進程掛起揖曾,以保證系統(tǒng)能正常運行落萎。
? ? ? ? ? 操作系統(tǒng)的需要。操作系統(tǒng)有時希望掛起某些進程炭剪,以便檢查運行中的資源使用情況或進行記賬练链。
? ? ? ? ? 對換的需要。為了緩和內存緊張的情況奴拦,將內存中處于阻塞狀態(tài)的進程換至外存上媒鼓。
睡眠(主動)
用戶主動暫停執(zhí)行進/線程,睡眠進/線程任存于內存错妖。
睡眠恢復:是自動完成的绿鸣,睡眠時間到了則恢復到就緒態(tài),睡眠時線程不會釋放對象鎖暂氯。
eg: Thread.sleep(1000)潮模;
//將線程睡眠一秒。