關於sleep的理解

2022-08-10 04:03:12 字數 712 閱讀 6839

unix是按時間片輪轉排程, windows是搶占式排程

以吃蛋糕為例子,10個人吃蛋糕,如果是unix下,

假設開始時,每個人都處於就緒狀態,那麼作業系統排程大家排好隊,按順序吃,每個人吃1分鐘,

1分鐘就是作業系統給大家分配的時間片, 那麼

1)有些人飯量大,吃乙份鐘也不飽,還想吃,但是作業系統在到1分鐘時限後,會讓這個離開,到就緒佇列裡,等作業系統叫他.

2)有些人飯量小,吃了10s鐘,就飽了,他跟作業系統說,我吃飽了,作業系統就排程另乙個人進來吃, 相當於sleep(0),主動放棄剩下的時間片.

3)還有些人吃了10s,這時噎住了,要去喝水,這時他跟作業系統說,我10分鐘後再回來吃,作業系統就排程另乙個人進來吃,並把這個人標記

成阻塞狀態,並且10分鐘內都不會叫這個人來吃蛋糕, 10分鐘到了之後,作業系統把這個人安排到就緒佇列中,當輪到這個人的時候,作業系統

通知它吃蛋糕. 相當於sleep(10分鐘)

如果是搶占式的作業系統

1. 作業系統先算出優先順序最高的人, 這個人一直吃,直到吃到不想吃為止

2.作業系統再算出優先順序最高的人,重複1 

sleep(x)  表示當前執行緒,在x時間內,不競爭cpu時間片, 等x時間到了後,才參與時間片的競爭,拿到時間片之後,才會被排程執行

所以sleep 是不能做精準定時的, 執行緒從休息到執行,中間等待的時間是 ( x + 進入就緒佇列後,等待cpu排程執行的時間)

關於Sleep函式

關於 sleep 函式在windows 系統和linux 系統下是兩個不同的函式,差別較大,但功能是相同的,都是將程序掛起一段時間。windows 系統下函式名為 sleep 其函式原型為 include 函式使用標頭檔案 void sleep dword dwmilliseconds 引數為毫秒 ...

關於執行緒的sleep函式

執行緒池的實現基本上是乙個生產者消費者模型,具體就是1個生產者對應多個多個消費者。主線程對應其中的生產者,將到達的客戶請求進行封裝後送到商店供消費者使用 這裡的商店可以用鍊錶或是其它容器來實現 而執行緒池中的多個工作執行緒就是這些商品 客戶請求 的消費者。include include includ...

理解執行緒的掛起,sleep還有阻塞

執行緒是靠cpu來執行的,cpu要執行乙個執行緒 不說別的 最起碼就是要占用cpu時間,象windows這樣的多工作業系統,可以允許多個執行緒同時執行,所謂的同時執行並不是真正的同時執行,而是輪流執行不同的執行緒,因為cpu速度很快,如果執行緒不是很多,就會給使用者有所有執行緒在同時執行的錯覺。cp...