C 系列 低優先順序的執行緒為什麼會被先執行

2021-09-27 02:36:16 字數 1936 閱讀 8658

執行緒的優先順序範圍從0(最低)到31(最高)。當你產生執行緒時,並不是直接以數值制定某優先順序,而是採用兩個步驟。

第乙個步驟是指定「優先順序等級(priority class)」給程序,第二步驟是指定「相對優先順序」給該進行的所有執行緒。其中的**在createprocess的dwcreationflags引數中指定。如果你不指定,系統預設給的是normal_priority_class,除非父程序是idle_priority_class(那麼子程序也會是idle_priority_class)。

要改變執行緒的優先順序,用如下函式:

bool setthreadpriority(handle hthread,int npriority)

setthreadpriority的引數:

thread_priority_idle                         空閒

thread_priority_lowest                   最低

thread_priority_below_normal    低於正常

thread_priority_normal                    正常

thread_priority_above_normal      高於正常

thread_priority_highest                    最高

thread_priority_time_critical         實時

為甚兩次執行的結果並不一樣,低優先順序的執行緒為什麼會比高優先順序的執行緒先執行?? 

在我們的作業系統當中,我們作業系統核心呼叫了若干個執行緒指定序列,然後指令序列開始推進,指令序列的優先順序叫做相對優先順序概念。

什麼叫做相對優先順序?在我們實際的開發過程當中,我們可能聽說過作業系統中乙個非常重要的知識,那就是盡可能多的使用cpu,cpu使用的越多,那麼就代表著cpu的計算任務越重,資源就可以得到充分的利用。

短作業優先,耗時短的任務越先讓cpu執行,那麼所有的作業,在任務完畢的時候,使得所有作業的平均等待時間最短。

看上去這是乙個非常優化的演算法,但是這樣存在乙個非常大的弊端,比如,作業來的很早,作業執行耗時很長,那麼在它還沒有執行之前來了乙個比它執行時間段的任務進入cpu的就緒佇列,那麼cpu就會先推進那個耗時短的作業,這樣就會造成公平性的喪失。

在windows系統中,其實也考慮過這個問題,我們的優先順序並不是絕對優先順序,在絕大多數情況下使用者態的優先順序都是相對的,那麼作業系統就會排程,這樣就會造成normal優先順序與idle優先並不是嚴格的按照高優先順序先執行,低優先後執行。作業系統也考慮到了公平性與效率性的問題。

idle執行緒優先於normal執行緒呼叫,在我們的排程過程當中,我麼現在的系統已經是多核的,不在像以前一樣,只有乙個單核,那麼在多核的情況下,a核與b核這個假定,主線程可能是和某乙個執行緒在a核當中,另乙個執行緒分發到另乙個空閒的核當中,那麼這就會造成低優先順序的執行緒先於高優先的執行緒呼叫。

優先順序只是乙個相對的概念,不要想當然的認為高優先順序的執行緒一定會先於低優先順序的執行緒呼叫。

C 多執行緒 優先順序

在我的公司這裡,因為要跟很多特殊的裝置打交道,所以會用到多執行緒的東西,那麼我們在進行多執行緒處理的時候,怎麼去設定優先順序 執行緒裡有個屬性priority可以用來設定優先順序,我設定執行緒1的優先順序高於執行緒2的優先順序,那麼執行緒1就會比執行緒2多執行一段時間,這個是人眼觀察不出來的 執行速...

執行緒的優先順序

執行緒的優先順序告訴程式該執行緒的重要程度有多大。如果有大量程式都被堵塞,都在等候執行,程式會盡可能地執行優先順序的那個程式。但是,這並不表示優先順序較低的執行緒不會執行。若程式的優先順序較低,只不過表示它被允許允許的機會小一些而已。執行緒的優先順序設定可以為1 10的任一數值,thread類中定義...

執行緒的優先順序

首先cpu處理現有執行緒集的順序是不確定的,但是排程器將傾向於讓優先順序最高的執行緒先執行。即執行緒的優先順序仍然無法保障線程的執行次序,只不過,優先順序高的執行緒獲取cpu資源的概率較大,優先順序低的並非沒機會執行。public class prioritiesdemo implements ru...