程序的阻塞和掛起的區別

2021-06-21 11:22:27 字數 1095 閱讀 8495

程序的阻塞和掛起的區別

理解一:掛起是一種主動行為,因此恢復也應該要主動完成,而阻塞則是一種被動行為,是在等待事件或資源時任務的表現,你不知道他什麼時候被阻塞(pend),也就不能確切 的知道他什麼時候恢復阻塞。而且掛起佇列在作業系統裡可以看成乙個,而阻塞佇列則是不同的事件或資源(如訊號量)就有自己的佇列。

理解二:阻塞(pend)就是任務釋放cpu,其他任務可以執行,一般在等待某種資源或訊號量的時候出現。掛起(suspend)不釋放cpu,如果任務優先順序高就永遠輪不到其他任務執行,一般掛起用於程式除錯中的條件中斷,當出現某個條件的情況下掛起,然後進行單步除錯。

理解三:pend是task主動去等乙個事件,或訊息.suspend是直接懸掛task,以後這個task和你沒任何關係,任何task間的通訊或者同步都和這個suspended task沒任何關係了,除非你resume task;

理解四:任務排程是作業系統來實現的,任務排程時,直接忽略掛起狀態的任務,但是會顧及處於pend下的任務,當pend下的任務等待的資源就緒後,就可以轉為ready了。ready只需要等待cpu時間,當然,任務排程也占用開銷,但是不大,可以忽略。可以這樣理解,只要是掛起狀態,作業系統就不在管理這個任務了。

理解五:掛起是主動的,一般需要用掛起函式進行操作,若沒有resume的動作,則此任務一直不會ready。而阻塞是因為資源被其他任務搶占而處於休眠態。兩者的表現方式都是從就緒態裡「清掉」,即對應標誌位清零,只不過實現方式不一樣。

作業系統中睡眠、阻塞、掛起的區別形象解釋:

首先這些術語都是對於執行緒來說的。對執行緒的控制就好比你控制了乙個雇工為你幹活。你對雇工的控制是通過程式設計來實現的。

掛起執行緒的意思就是你對主動對雇工說:「你睡覺去吧,用著你的時候我主動去叫你,然後接著幹活」。

使執行緒睡眠的意思就是你主動對雇工說:「你睡覺去吧,某時某刻過來報到,然後接著幹活」。

執行緒阻塞的意思就是,你突然發現,你的雇工不知道在什麼時候沒經過你允許,自己睡覺呢,但是你不能怪雇工,肯定你 這個雇主沒注意,本來你讓雇工掃地,結果掃帚被偷了或被鄰居家借去了,你又沒讓雇工繼續幹別的活,他就只好睡覺了。至於掃帚回來後,雇工會不會知道,會不會繼續幹活,你不用擔心,雇工一旦發現掃帚回來了,他就會自己去幹活的。因為雇工受過良好的培訓。這個培訓機構就是作業系統。

程序的阻塞和掛起的區別

作業系統中睡眠 阻塞 掛起的區別形象解釋 首先這些術語都是對於執行緒來說的。對執行緒的控制就好比你控制了乙個雇工為你幹活。你對雇工的控制是通過程式設計來實現的。掛起執行緒的意思就是你對主動對雇工說 你睡覺去吧,用著你的時候我主動去叫你,然後接著幹活 使執行緒睡眠的意思就是你主動對雇工說 你睡覺去吧,...

程序的阻塞和掛起的區別

作業系統中睡眠 阻塞 掛起的區別形象解釋 首先這些術語都是對於執行緒來說的。對執行緒的控制就好比你控制了乙個雇工為你幹活。你對雇工的控制是通過程式設計來實現的。掛起執行緒的意思就是你對主動對雇工說 你睡覺去吧,用著你的時候我主動去叫你,然後接著幹活 使執行緒睡眠的意思就是你主動對雇工說 你睡覺去吧,...

阻塞和掛起的區別

阻塞 如果乙個任務當前正在等待某個外部事件的話就說它處於阻塞態,比如說如果某個任務調 用了函式 vtaskdelay 的話就會進入阻塞態,直到延時週期完成。任務在等待佇列 訊號量 事 件組 通知或互斥訊號量的時候也會進入阻塞態。任務進入阻塞態會有乙個超時時間,當超過 這個超時時間任務就會退出阻塞態,...