【轉】 多線程之linux線程調度策略


轉自:http://blog.csdn.net/byperseverance/article/details/44522731

 

       Linux線程的調度策略分為3個:SCHED_OTHER,SCHED_FIFO,SCHED_RR

       講策略之前,大家需要理解實時與非實時之分。實時就是指操作系統對一些中斷等的響應時效性非常高,即使是在內核態的時候,非實時反之。目前像VxWorks屬於實時操作系統,大家常用的windows,linux則屬於非實時系統,也叫分時操作系統。響應實時的表現主要是搶占,搶占通過優先級來控制的,優先級高的任務最先占用CPU。

      SCHED_OTHER,非實時的,需要注意的是這排隊跟上WC一樣,前面的人占用了位置,它不出來,第二個人是輪不上的。

      SCHED_FIFO:實時任務調度策略,先到先服務。一旦占用cpu則一直運行,直到有更高優先級任務到達或自己放棄。

      SCHED_RR,實時的分時調試策略,時間片輪轉。當任務的時間片用完,系統將重新分配時間片,並置於就緒隊列尾。放在隊列尾保證了所有具有相同優先級的RR任務的調度公平。所以說SCHED_RR綜合了前面兩種方式。

      理解了前面的概念其實只是知道了一部分,真正在應用的時候還需要注意很多,下面我總結一下我覺得還需要了解的一些注意點:

       1,linux的任務有實時和分時之分,但它並不屬於實時操作系統,因為在某些方面是盡量往實時響應上靠,但它的部分任務搶占在內核里還是需要等待內枋處理完才能得到CPU的。

       2,linux默認的線程屬性是SCHED_OTHER。我們需要注意有些線程在處理事務到一半的時候,CPU給其它線程干活去了。

       3,使用實時策略時,如果有唯一一個優先級高的任務,當它搶占到CPU的時候,它不去sleep,或主動放棄CPU啊,那么其它優先級低的線程就只能死等了。所以像這種優先級高的任務一般干的活不會是一直占着時間片的,比如按鍵中斷,中斷來線程立即響應。如果你把中斷線程設成分時的,哦哦,如果剛好線程比較多,一個線程100ms時間片,你想一下,一秒后響應按鍵不是不可能的。

       4,在linux的內核和應用層設置優先級是不一樣的,內核里是數字越小,優先級越高,應用里面反之。當時對於剛學習這個調試策略是比較暈的,因為大部分作者並沒有說明是在內核級還是用戶級里的優先級。

       5,這三個策略是否可以同時存在,答案是肯定的。這種情況下實時策略在運行的時候,SCHED_OTHER它怎么得到CPU呢?linux有一個組策略就是分配實時和分時的時間片的,大家可以百度sched_rt_runtime_us和sched_rt_period_us.意思就是設定一個總單位時間和實時策略占用時間,剩下的不是分時策略時間。SCHED_OTHER占用的時間少,但總還是可以分得到的。比如大家在linux啟動一個一直占用再去敲那命令行,系統還是會響應的,只是很慢。兩個實時策略在調度的時候,也遵守優級高搶占,同級別排隊的原則。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM