我們在用pthread創建線程時,能夠指定調度策略policy——SCHED_OTHER(默認)、SCHED_RR和SCHED_FIFO。這里TALK一下兩個實時策略——SCHED_RR和SCHED_FIFO。
先看一下效果。我們創建了四個子線程,指定最高優先級(針對特定策略):
- SCHED_RR

- SCHED_FIFO

對同樣優先級的任務。SCHED_RR是分配給每一個任務一個特定的時間片,然后輪轉依次運行。而SCHED_FIFO則是讓一個任務運行完再調度下一個任務,而順序就是依照創建的先后。
SCHED_RR是依據時間片來調度線程的,當時間片用完時,無論這個線程優先級有多高,都不會在執行,而是進入就緒隊列,等待下一個時間片到來。只是圖1顯示,在thread5798時間片用完時,該線程緊接着進行了一次搶占preemption。又獲得了一個時間片。順便提一句時間片長度的定位是linux憑經驗來的。即選擇盡可能長、同一時候能保持良好對應時間的一個時間片。