linux核心的三種排程策略:
1,sched_other 分時排程策略,
2,sched_fifo實時排程策略,先到先服務。一旦占用cpu則一直執行。一直執行直到有更高優先順序任務到達或自己放棄
3,sched_rr實時排程策略,時間片輪轉。當程序的時間片用完,系統將重新分配時間片,並置於就緒佇列尾。放在佇列尾保證了所有具有相同優先順序的rr任務的排程公平
linux執行緒優先順序設定
首先,可以通過以下兩個函式來獲得執行緒可以設定的最高和最低優先順序,函式中的策略即上述三種策略的巨集定義:
int sched_get_priority_max(int policy);
int sched_get_priority_min(int policy);
sched_other是不支援優先順序使用的,而sched_fifo和sched_rr支援優先順序的使用,他們分別為1和99,數值越大優先順序越高。
設定和獲取優先順序通過以下兩個函式
int
pthread_attr_setschedparam
(pthread_attr_t
*attr,
const
struct sched_param *param)
;int pthread_attr_getschedparam
(const
pthread_attr_t
*attr,
struct sched_param *param)
;param.sched_priority = 51;
//設定優先順序
系統建立執行緒時,預設的執行緒是sched_other。所以如果我們要改變執行緒的排程策略的話,可以通過下面的這個函式實現。
int
pthread_attr_setschedpolicy
(pthread_attr_t
*attr,
int policy)
;
上面的param使用了下面的這個資料結構:
struct sched_param
;
我們可以通過下面的測試程式來說明,我們自己使用的系統的支援的優先順序:
#
include
#include
#include
#include
<
assert
.h>
static
int get_thread_policy(
pthread_attr_t
*attr)
return policy;
}static
void show_thread_priority(
pthread_attr_t
*attr,
int policy)
static
int get_thread_priority(
pthread_attr_t
*attr)
static
void set_thread_policy(
pthread_attr_t
*attr,
int policy)
int main(
void
)
下面是測試程式的執行結果:
policy=sched_other
show current configuration of priority
max_priority=0
min_priority=0
show sched_fifo of priority
max_priority=99
min_priority=1
show sched_rr of priority
max_priority=99
min_priority=1
show priority of current thread
priority=0set thread policy
set sched_fifo policy
policy= sched_fifo
set sched_rr policy
policy= sched_rrrestore current policy
policy=sched_other
Linux下執行緒的排程策略與優先順序
linux核心的三種排程策略 1,sched other 分時排程策略,2,sched fifo實時排程策略,先到先服務。一旦占用cpu則一直執行。一直執行直到有更高優先順序任務到達或自己放棄 3,sched rr實時排程策略,時間片輪轉。當程序的時間片用完,系統將重新分配時間片,並置於就緒佇列尾。...
Linux下執行緒的排程策略與優先順序(二)
分類 嵌入式學習 2010 08 25 15 57 251人閱讀收藏 舉報 include include include include void thread1 printf thread 1 n printf pthread 1 exit n void thread2 printf threa...
Linux下執行緒的排程策略與優先順序(二)
include stdio.h include unistd.h include stdlib.h include pthread.h void thread1 printf thread 1 n printf pthread 1 exit n void thread2 printf thread ...