linux 執行緒優先順序

2021-06-15 11:46:06 字數 1676 閱讀 4056

linux核心的三種排程方法:

1,sched_other 分時排程策略,

2,sched_fifo實時排程策略,先到先服務

3,sched_rr實時排程策略,時間片輪轉 

sched_rr排程和sched_fifo排程的程序屬於實時程序,以分時排程的程序是非實時程序。

當實時程序準備就緒後,如果當前cpu正在執行非實時程序,則實時程序立即搶占非實時程序。

sched_rr執行緒和sched_fifo執行緒都採用實時優先順序做為排程的權值標準,rr是fifo的乙個延伸。fifo時,如果兩個程序的優先順序一樣,則這兩個優先順序一樣的程序具體執行哪乙個是由其在佇列中的位置決定的,這樣導致一些不公正性(優先順序是一樣的,為什麼要讓你一直執行?),如果將兩個優先順序一樣的任務的排程策略都設為rr,則保證了這兩個任務可以迴圈執行,保證了公平。

使用pthread_yield()可以放棄執行緒的執行權

採用sched_rr和sched_fifo的實時執行緒呼叫pthread_yield後,還是處於就緒佇列中,沒有同等優先順序或者更高優先順序的情況下,他們將繼續執行

linux核心的排程單位是執行緒(linux下執行緒和程序的概念是比較模糊的,執行執行緒是核心的排程物件),在測試時,使用sched_fifo和sched_rr能夠達到95%的cpu使用率,而執行while(1)的分時執行緒(在不通的程序裡面)得到30%左右。同時同時執行帶有實時排程的執行緒(不阻塞)的程序和分時執行緒時,分時執行緒也能獲得少量的執行時間。

sched_fifo和sched_rr並不是嚴格按照sched_fifo和sched_rr定義執行的,根據linux 核心的排程策略不通其它執行緒或多或少獲得了cpu時間(如上)

實時執行緒的建立需要超級使用者許可權

實時執行緒的建立

routine是執行例程,dwpriority是優先順序sched_get_priority_max和sched_get_priority_min得到一般為1-99越大優先順序越高

int  create_fifo_thd(void* (*  routine)(void*  param),int  dwpriority)

pthread_attr_destroy(&attr);

return  pid;

}int  create_rr_thd(void* (*  routine)(void*  param),int  dwpriority)

else if (policy == sched_fifo) else if (policy == sched_other)

//exit(1);

pthread_attr_setdetachstate(&attr,pthread_create_detached);

struct  sched_param  sch_param;

sch_param.sched_priority  =  dwpriority;

if (pthread_attr_setschedparam(&attr,&sch_param) != 0)

printf("\npthread_attr_setschedparam\n");

pthread_t  pid  =  0;

if (pthread_create(&pid,&attr,routine,0) != 0)

pthread_attr_destroy(&attr);

return  pid;

}

linux執行緒優先順序

建立執行緒的順序 other rr low pri fifo low pri rr high pri fifo high pri rr low pri 可以搶占 other fifo low pri 可以搶占 rr low pri rr high pri 可以搶占 fifo low pri fifo...

Linux執行緒優先順序

linux核心的三種排程策略 1.sched other 分時排程策略 2.sched fifo 實時排程策略,先到先服務。一旦占用cpu則一直執行。一直執行直到有更高優先順序任務到達或自己放棄 3.sched rr實 時排程策略,時間片輪轉。當程序的時間片用完,系統將重新分配時間片,並置於就緒佇列...

linux 執行緒優先順序

include include define maxthreads 3 void myclear void x void mycompprint void xx pthread cleanup pop 0 從呼叫執行緒清理堆疊的頂部移走清理函式指標,但並不執行它,pthread testcancel...