当前位置: 技术问答>linux和unix
Linux线程的优先级调度问题
来源: 互联网 发布时间:2016-08-25
本文导语: Linux内核的三种调度策略: 1,SCHED_OTHER 分时调度策略, 2,SCHED_FIFO实时调度策略,先到先服务。一旦占用cpu则一直运行。一直运行直到有更高优先级任务到达或自己放弃 3,SCHED_RR实时调度策略,时间...
Linux内核的三种调度策略:
1,SCHED_OTHER 分时调度策略,
2,SCHED_FIFO实时调度策略,先到先服务。一旦占用cpu则一直运行。一直运行直到有更高优先级任务到达或自己放弃
3,SCHED_RR实时调度策略,时间片轮转。当进程的时间片用完,系统将重新分配时间片,并置于就绪队列尾。放在队列尾保证了所有具有相同优先级的RR任务的调度公平
下面的一段程序的运行结果与预想中的不太一样,请高手指教一下:
#include
#include
#include
#include
void FunThread1()
{
int i,j;
int policy;
struct sched_param param;
pthread_getschedparam(pthread_self(),&policy,¶m);
if(policy==SCHED_OTHER)
printf("SCHED_OTHERn");
if(policy==SCHED_RR)
printf("SCHED_RRn");
if(policy==SCHED_FIFO)
printf("SCHED_FIFOn");
sched_yield();
for(i=1;ia.log
cat ./a.log
内容节选如下
The current user is root
SCHED_RR
thread 2
thread 2
thread 2
thread 2
thread 2
SCHED_RR
thread 1
thread 1
thread 1
thread 1
thread 1
thread 1
thread 1
thread 1
thread 1
Thread1 exit
thread 2
thread 2
thread 2
thread 2
thread 2
..........
thread 2
Thread2 exit
SCHED_OTHER
thread 3
thread 3
thread 3
thread 3
thread 3
thread 3
thread 3
thread 3
thread 3
Thread3 exit
当然也可以通过修改thread3的休眠时间及循环次数,来验证实时进程对一般进程的抢占,
1,SCHED_OTHER 分时调度策略,
2,SCHED_FIFO实时调度策略,先到先服务。一旦占用cpu则一直运行。一直运行直到有更高优先级任务到达或自己放弃
3,SCHED_RR实时调度策略,时间片轮转。当进程的时间片用完,系统将重新分配时间片,并置于就绪队列尾。放在队列尾保证了所有具有相同优先级的RR任务的调度公平
下面的一段程序的运行结果与预想中的不太一样,请高手指教一下:
#include
#include
#include
#include
void FunThread1()
{
int i,j;
int policy;
struct sched_param param;
pthread_getschedparam(pthread_self(),&policy,¶m);
if(policy==SCHED_OTHER)
printf("SCHED_OTHERn");
if(policy==SCHED_RR)
printf("SCHED_RRn");
if(policy==SCHED_FIFO)
printf("SCHED_FIFOn");
sched_yield();
for(i=1;ia.log
cat ./a.log
内容节选如下
The current user is root
SCHED_RR
thread 2
thread 2
thread 2
thread 2
thread 2
SCHED_RR
thread 1
thread 1
thread 1
thread 1
thread 1
thread 1
thread 1
thread 1
thread 1
Thread1 exit
thread 2
thread 2
thread 2
thread 2
thread 2
..........
thread 2
Thread2 exit
SCHED_OTHER
thread 3
thread 3
thread 3
thread 3
thread 3
thread 3
thread 3
thread 3
thread 3
Thread3 exit
当然也可以通过修改thread3的休眠时间及循环次数,来验证实时进程对一般进程的抢占,