wince使用搶占式的基於優先順序的時間片輪轉排程演算法排程執行緒。對於就緒佇列中的執行緒,優先順序高的先獲得時間片執行,優先順序相同時按時間片輪轉,正在執行的執行緒用完時間片後無論是否執行完畢都得讓出cpu退回就緒佇列等待下一次時間片分配。
wince優先順序分256級(0~255)其中應用程式可使用248~255,其它的供驅動及核心使用。
wince執行緒狀態轉換圖
wince具體的執行緒排程規則如下:
選擇就緒佇列中的高優先順序程序先執行,存在多個最高優先順序執行緒時按時間片輪轉,如果執行緒時間片設為0則會一直執行直到阻塞或終止。
執行緒排程中可能存在如下問題:假設有一優先順序為34的執行緒t1,它需要獲得資源r才能執行;但此時資源r被就緒佇列中乙個優先順序為255的執行緒t2所占有,而且就就緒佇列中還有優先順序高於t2的其它執行緒t3, t4....按照wince的排程演算法t1阻塞等待t2釋放r,t3先執行,t3執行完後,t4執行,t4之後還有其它比t2優先順序高的就緒執行緒,t2很可能永遠得不到執行,但如果t2不執行則t1將會一直阻塞。
解決這個問題windows中有兩種方案:
1)完全巢狀法(fully nested):將所有就緒執行緒逐個執行直到高優先順序執行緒t1可以執行;
2)單級法(single level):找到占有高優先順序執行緒t1執行所需資源r的執行緒t2,將它的優先順序提高到與高優先順序執行緒t1相同的優先順序,然後執行執行緒t2直到其釋放資源r。此法也稱優先順序繼承法(priority inheritance)
完全巢狀法效率低,犧牲實時性;單級法可能引發死鎖(以上例子中如果t1也占有t2執行所必需的資源r1時就會出現死鎖)。
執行緒排程 執行緒池
1.每次new thread新建物件,效能查。2.執行緒缺乏統一管理,可能無限制的新建執行緒,相互競爭,有可能占用過多系統資源導致司機或oom out of memory 3.缺少更多的功能,如更多執行 定期執行 執行緒中斷。1.重用存在的執行緒,減少物件建立 消亡的開銷,效能好。2.可有效控制最大...
posix 執行緒排程
thread 排程 posix 定義一種優先順序排程模型,此模型確定任何兩個執行緒相對於對方的重要程度。每當有乙個以上的執行緒可以執行 執行就緒 時,系統都將選擇具有最高優先順序的執行緒。posix 執行緒排程語義是按照一種概念模型定義的,在此概念模型中有乙個有效優先順序範圍,並且有一組執行緒列表,...
執行緒的排程
getpriortiy 返回執行緒的優先順序 setpriority int newpriortiy 改變執行緒的優先順序 執行緒建立時繼承父執行緒的優先順序 第優先順序只是獲得排程的概率低,並非一定是在高優先順序執行緒之後才被呼叫。package threadstudy public class ...