天天看點

程序的阻塞和挂起的差別(整理)

  • 了解一:挂起是一種主動行為,是以恢複也應該要主動完成,而阻塞則是一種被動行為,是在等待事件或資源時任務的表現,你不知道他什麼時候被阻塞(pend),也就不能确切 的知道他什麼時候恢複阻塞。而且挂起隊列在作業系統裡可以看成一個,而阻塞隊列則是不同的事件或資源(如信号量)就有自己的隊列。
  • 了解二:阻塞(pend)就是任務釋放CPU,其他任務可以運作,一般在等待某種資源或信号量的時候出現。挂起(suspend)不釋放CPU,如果任務優先級高就永遠輪不到其他任務運作,一般挂起用于程式調試中的條件中斷,當出現某個條件的情況下挂起,然後進行單步調試。
  • 了解三:pend是task主動去等一個事件,或消息.suspend是直接懸挂task,以後這個task和你沒任何關系,任何task間的通信或者同步都和這個suspended task沒任何關系了,除非你resume task;
  • 了解四:任務排程是作業系統來實作的,任務排程時,直接忽略挂起狀态的任務,但是會顧及處于pend下的任務,當pend下的任務等待的資源就緒後,就可以轉為ready了。ready隻需要等待CPU時間,當然,任務排程也占用開銷,但是不大,可以忽略。可以這樣了解,隻要是挂起狀态,作業系統就不在管理這個任務了。
  • 了解五:挂起是主動的,一般需要用挂起函數進行操作,若沒有resume的動作,則此任務一直不會ready。而阻塞是因為資源被其他任務搶占而處于休眠态。兩者的表現方式都是從就緒态裡“清掉”,即對應标志位清零,隻不過實作方式不一樣。

繼續閱讀