執行緒從建立、執行到結束總是處於下面五個狀態之一:新建狀態、就緒狀態、執行狀態、阻塞狀態及死亡狀態。
下圖是使用時間片輪轉法的作業系統程序的狀態和它們之間的轉換。
掛起和睡眠是主動的,掛起恢復需要主動完成,睡眠恢復則是自動完成的,因為睡眠有乙個睡眠時間,睡眠時間到則恢復到就緒態。而阻塞是被動的,是在等待某種事件或者資源的表現,一旦獲得所需資源或者事件資訊就自動回到就緒態。
睡眠和掛起是兩種行為,阻塞則是一種狀態。
作業系統中睡眠、阻塞、掛起的區別形象解釋:
首先這些術語都是對於執行緒來說的。對執行緒的控制就好比你控制了乙個雇工為你幹活。你對雇工的控制是通過程式設計來實現的。
掛起執行緒的意思就是你對主動對雇工說:「你睡覺去吧,用著你的時候我主動去叫你,然後接著幹活」。
使執行緒睡眠的意思就是你主動對雇工說:「你睡覺去吧,某時某刻過來報到,然後接著幹活」。
執行緒阻塞的意思就是,你突然發現,你的雇工不知道在什麼時候沒經過你允許,自己睡覺呢,但是你不能怪雇工,肯定你這個雇主沒注意,本來你讓雇工掃地,結果掃帚被偷了或被鄰居家借去了,你又沒讓雇工繼續幹別的活,他就只好睡覺了。至於掃帚回來後,雇工會不會知道,會不會繼續幹活,你不用擔心,雇工一旦發現掃帚回來了,他就會自己去幹活的。因為雇工受過良好的培訓。這個培訓機構就是作業系統。
程序的掛起 阻塞和睡眠
要說掛起 阻塞 睡眠難免讓人想到程序生命週期中的阻塞態或者等待狀態,而掛起和睡眠卻沒有出現在程序生命週期中,說明這三個其實在本質上區別並不那麼大,但是既然稱呼不同,應該就有不同的道理。先說阻塞,既然它能出現在程序生命週期,必然是每個程序都會經歷的乙個階段,眾所周知,程序在執行過程中必然要獲取資源,暫...
執行緒睡眠,掛起,阻塞的乙個形象比喻
作業系統中睡眠 阻塞 掛起的區別形象解釋 首先這些術語都是對於執行緒來說的。對執行緒的控制就好比你控制了乙個雇工為你幹活。你對雇工的控制是通過程式設計來實現的。掛起執行緒的意思就是你對主動對雇工說 你睡覺去吧,用著你的時候我主動去叫你,然後接著幹活 使執行緒睡眠的意思就是你主動對雇工說 你睡覺去吧,...
睡眠 等待 阻塞
睡眠,等待,阻塞,應該是乙個概念 睡眠相關的 位於 include linux wait.h 和 kernel wait.c 中 1.進入睡眠 wait event sleep until a condition gets true wq the waitqueue to wait on condi...