在乙個程序裡,執行緒的排程有搶占式或者非搶占的模式。
在搶占模式下,作業系統負責分配cpu時間給各個程序,一旦當前的程序使用完分配給自己的cpu時間,作業系統將決定下乙個占用cpu時間的是哪乙個執行緒。因此作業系統將定期的中斷當前正在執行的執行緒,將cpu分配給在等待佇列的下乙個執行緒。所以任何乙個執行緒都不能獨佔cpu。每個執行緒占用cpu的時間取決於程序和作業系統。程序分配給每個執行緒的時間很短,以至於我們感覺所有的執行緒是同時執行的。實際上,系統執行每個程序的時間有2毫秒,然後排程其他的執行緒。它同時他維持著所有的執行緒和迴圈,分配很少量的cpu時間給執行緒。執行緒的的切換和排程是如此之快,以至於感覺是所有的執行緒是同步執行的。
排程是什麼意思?排程意味著處理器儲存著將要執行完cpu時間的程序的狀態和將來某個時間裝載這個程序的狀態而恢復其執行。然而這種方式也有不足之處,乙個執行緒可以在任何給定的時間中斷另外乙個執行緒的執行。假設乙個執行緒正在向乙個檔案做寫操作,而另外乙個執行緒中斷其執行,也向同乙個檔案做寫操作。 windows 95/nt, unix使用的就是這種執行緒排程方式。
在非搶占的排程模式下,每個執行緒可以需要cpu多少時間就占用cpu多少時間。在這種排程方式下,可能乙個執行時間很長的執行緒使得其他所有需要cpu的執行緒」餓死」。在處理機空閒,即該程序沒有使用cpu時,系統可以允許其他的程序暫時使用cpu。占用cpu的執行緒擁有對cpu的控制權,只有它自己主動釋放cpu時,其他的執行緒才可以使用cpu。一些i/o和windows 3。x就是使用這種排程策略。
搶占式排程與非搶占式排程
資料 這是本人在作業系統期中考試前複習是碰到的問題,花了一些時間解決,現在記錄下來。在學習 cpu 排程的時候,關於搶占式 非搶占式排程方式有不理解的地方,想不到google一下就出來了很好的解釋,看來還是要多搜尋多思考。cpu 排程決策可以在如下四種環境下發生 對於第1和第4兩種情況,沒有選擇只有...
執行緒的排程有搶占式或者非搶占
在乙個程序裡,執行緒的排程有搶占式或者非搶占的模式。在搶占模式下,作業系統負責分配 時間給各個程序,一旦當前的程序使用完分配給自己的 時間,作業系統將決定下乙個占用 時間的是哪乙個執行緒。因此作業系統將定期的中斷當前正在執行的執行緒,將 分配給在等待佇列的下乙個執行緒。所以任何乙個執行緒都不能獨佔 ...
Lua非搶占式多執行緒
當乙個協同正在執行時,不能在外部終止他。只能通過顯示的呼叫 yield 掛起他的執行。對於某些應用來說這個不存在問題,但有些應用對此是不能忍受的。不存在搶占式呼叫的程式是容易編寫的。不需要考慮同步帶來的 bugs,因為程式中的所有執行緒間的同步都是顯示的。你僅僅需要在協同 超出臨界區時呼叫 yiel...