經常會有人問執行緒(或者程序)休眠和阻塞的區別,掛起和阻塞的區別。個人覺得不同的作業系統,會有不同的差異。本文做乙個思路的介紹。
程序一般分五個狀態:建立,就緒,執行,阻塞,結束
執行緒一般分四個狀態:就緒,執行,阻塞,死亡
針對程序或執行緒各個狀態的區別,從名字大概就可以看出來了。針對阻塞、休眠,掛起,又怎麼考慮區別呢?實際使用時,經常稱呼阻塞後進入掛起,因為可以認為掛起就是乙個動作,進入阻塞態或休眠態。休眠和掛起並沒有寫入執行緒、程序生命週期的狀態。
阻塞pend是被動,在訪問臨界資源(鎖等)時,被阻塞了
休眠和掛起,一般是主動(或由父程序發起掛起),休眠在休眠時,就知道了計畫休眠時長sleep(10),掛起suspend需要等待resume。
時間片到了,也會掛起執行緒。
阻塞會釋放cpu,一般不釋放記憶體。
掛起一般會繼續占用cpu,一般會釋放記憶體,被轉移到外存。
休眠一般會釋放cpu,低優先順序或其它優先順序可以得到執行。也有說sleep()指執行緒被呼叫時,佔著cpu不工作,形象的說明為「佔著cpu」睡覺
阻塞不會釋放鎖
掛起會釋放鎖
休眠也不會釋放鎖
任務排程是作業系統來實現的,任務排程時,直接忽略掛起狀態的任務,
但是會顧及處於pend下的任務,當pend下的任務等待的資源就緒後,就可以轉為ready了。ready只需要等待cpu時間
老張愛喝茶,廢話不說,煮開水。
出場人物:老張,水壺兩把(普通水壺,簡稱水壺;會響的水壺,簡稱響水壺)。
1 老張把水壺放到火上,立等水開。(同步阻塞)
老張覺得自己有點傻
2 老張把水壺放到火上,去客廳看電視,時不時去廚房看看水開沒有。(同步非阻塞)
老張還是覺得自己有點傻,於是變高階了,買了把會響笛的那種水壺。水開之後,能大聲發出嘀~~~~ 的噪音。
3 老張把響水壺放到火上,立等水開。(非同步阻塞)
老張覺得這樣傻等意義不大
4 老張把響水壺放到火上,去客廳看電視,水壺響之前不再去看它了,響了再去拿壺。(非同步非阻塞)
老張覺得自己聰明了。
對執行緒的控制就好比你控制了乙個雇工為你幹活。你對雇工的控制是通過程式設計來實現的。
掛起執行緒的意思就是你對主動對雇工說:「你睡覺去吧,用著你的時候我主動去叫你,然後接著幹活」。
使執行緒睡眠的意思就是你主動對雇工說:「你睡覺去吧,某時某刻過來報到,然後接著幹活」。
執行緒阻塞的意思就是,你突然發現,你的雇工不知道在什麼時候沒經過你允許,自己睡覺呢,
但是你不能怪雇工,肯定你 這個雇主沒注意,本來你讓雇工掃地,結果掃帚被偷了或被鄰居家借去了,
你又沒讓雇工繼續幹別的活,他就只好睡覺了。至於掃帚回來後,雇工會不會知道,會不會繼續幹活,你不用擔心,
雇工一旦發現掃帚回來了,他就會自己去幹活的。因為雇工受過良好的培訓。這個培訓機構就是作業系統。
執行緒休眠sleep和wait
我們都知道,休眠執行緒有兩種方法,那就是sleep 和wait 先簡單了解一下這兩個方法 1.sleep 是thread裡的方法 static修飾,類名.呼叫即可 設定的時間一到,自動會醒過來繼續執行 2.wait 是object裡的方法 必須用notify或者notifyall來喚醒 在看黑馬程式...
執行緒併發問題和執行緒的休眠
1 併發安全性問題 網際網路的專案中存在這大量的併發案例,如賣火車票,電商 等 範例 火車票有100張票,4個視窗同時賣票 1 採用繼承thread來實現 package com.cn.tickets 賣票視窗 author administrator public class saleticket...
電腦休眠和睡眠的區別
38有用 1 已投票20 收藏 1 已收藏全文閱讀 分步閱讀 加入雜誌 步驟 windows作業系統中很早就加入了待機 休眠等模式,而windows vista中更是新加入了一種叫做睡眠的模式,可是很多人還是習慣在不使用電腦的時候將其徹底關閉。其實充分利用這些模式,我們不僅可以節約電力消耗,還可以用...