Linux线程调度策略以及优先级实验(图文) |
您所在的位置:网站首页 › java线程调度所采用的优先级策略 › Linux线程调度策略以及优先级实验(图文) |
Linux线程调度策略以及优先级实验
什么是线程调度策略?
Linux内核共有三种调度算法,他们分别是: 1、SCHED_OTHER 分时调度策略, 2、SCHED_FIFO实时调度策略,先到先服务 3、SCHED_RR实时调度策略,时间片轮转 其中,SCHED_FIFO与SCHED_RR属于实时策略,SCHED_OTHER属于分时策略。 实时策略线程将得到优先调用,实时策略线程根据实时优先级决定调度权值,分时策略线程则通过nice和counter值决定权值,nice越小,counter越大,被调度的概率越大,也就是曾经使用了cpu最少的线程将会得到优先调度。 三种调度策略 分时调度策略SCHED_OTHER 分时调度策略: 非实时的,无法设置优先级 实时调度策略SCHED_FIFO实时调度策略: 先到先服务。一旦占用cpu则一直运行。一直运行直到有更高优先级任务到达或自己放弃 SCHED_RR实时调度策略: 时间片轮转。当进程的时间片用完,系统将重新分配时间片,并置于就绪队列尾。放在队列尾保证了所有具有相同优先级的RR任务的调度公平 调度策略组合情况所有任务都采用linux分时调度策略(SCHED_OTHER)时: 创建时指定优先级nice值,根据nice值确定在cpu上的执行时间(counter),对每个任务动态优先级的计算(counter+20-nice)结果去选择运行,当这 个时间片用完后(counter减至0)或者主动放弃cpu时,该任务被放在就绪队列末尾(时间片用完)或等待队列(因等待资源而放弃cpu)中。 所有任务都采用FIFO时: 优先级高的先运行,并且该任务将一直占有CPU直到优先级更高的任务就绪或者主动放弃。同优先级先入队列先运行。 所有任务都采用RR时 综合了前两种策略,优先级高的先运行,优先级相同共分时间片,用完时间片的去就绪队列尾。 任务中同时含有实时和分时时 当实时进程准备就绪后,如果当前cpu正在运行非实时进程,则实时进程立即抢占非实时进程。 测试实验主要目的时测试在不同的调度策略以及不同的优先级设定的状况下,线程的抢占情况。 测试方法主要为在设定线程策略与优先级后,创建三个线程,观察它们的log输出情况以及使用busybox top查看CPU占用情况。 修改线程属性的代码部分如下: param1.sched_priority = 40; //修改优先级 pthread_attr_setinheritsched(&attr1,PTHREAD_EXPLICIT_SCHED); pthread_attr_setschedpolicy(&attr1,SCHED_FIFO); //修改调度策略 if(0!=pthread_attr_setschedparam(&attr1,¶m1)) { printf("setschedpolicy attr1 NG! \n"); }实验全部代码: #include #include #include #include #include #include #include #if 1 void *Thread1(void* pp) { sleep(1); int i; int policy; struct sched_param param; pthread_getschedparam(pthread_self(),&policy,¶m); switch(policy) { case SCHED_OTHER: printf("SCHED_OTHER 1\n") |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |