原文:https://blog.csdn.net/xpy870663266/article/details/78164506
阻塞 VS 掛起
阻塞與掛起都是進(jìn)程的狀態(tài),但他們有一些相似之處,也有一些區(qū)別,下面先對他們進(jìn)行概述潭兽,再進(jìn)行比較
阻塞:正在執(zhí)行的進(jìn)程由于發(fā)生某時間(如I/O請求撤缴、申請緩沖區(qū)失敗等)暫時無法繼續(xù)執(zhí)行。此時引起進(jìn)程調(diào)度,OS把處理機分配給另一個就緒進(jìn)程舷暮,而讓受阻進(jìn)程處于暫停狀態(tài),一般將這種狀態(tài)稱為阻塞狀態(tài)噩茄。
掛起:由于系統(tǒng)和用戶的需要引入了掛起的操作下面,進(jìn)程被掛起意味著該進(jìn)程處于靜止?fàn)顟B(tài)。如果進(jìn)程正在執(zhí)行绩聘,它將暫停執(zhí)行沥割,若原本處于就緒狀態(tài),則該進(jìn)程此時暫不接受調(diào)度凿菩。
共同點:
- 進(jìn)程都暫停執(zhí)行
- 進(jìn)程都釋放CPU驯遇,即兩個過程都會涉及上下文切換
不同點:
- 對系統(tǒng)資源占用不同:雖然都釋放了CPU,但阻塞的進(jìn)程仍處于內(nèi)存中蓄髓,而掛起的進(jìn)程通過“對換”技術(shù)被換出到外存(磁盤)中。
- 發(fā)生時機不同:阻塞一般在進(jìn)程等待資源(IO資源舒帮、信號量等)時發(fā)生会喝;而掛起是由于用戶和系統(tǒng)的需要,例如玩郊,終端用戶需要暫停程序研究其執(zhí)行情況或?qū)ζ溥M(jìn)行修改肢执、OS為了提高內(nèi)存利用率需要將暫時不能運行的進(jìn)程(處于就緒或阻塞隊列的進(jìn)程)調(diào)出到磁盤
- 恢復(fù)時機不同:阻塞要在等待的資源得到滿足(例如獲得了鎖)后,才會進(jìn)入就緒狀態(tài)译红,等待被調(diào)度而執(zhí)行预茄;被掛起的進(jìn)程由將其掛起的對象(如用戶、系統(tǒng))在時機符合時(調(diào)試結(jié)束侦厚、被調(diào)度進(jìn)程選中需要重新執(zhí)行)將其主動激活