转自:http://blog.csdn.net/byperseverance/article/details/44522731

Linux线程的调度策略分为3个:SCHED_OTHER,SCHED_FIFO,SCHED_RR

讲策略之前,大家需要理解实时与非实时之分。实时就是指操作系统对一些中断等的响应时效性非常高,即使是在内核态的时候,非实时反之。目前像VxWorks属于实时操作系统,大家常用的windows,linux则属于非实时系统,也叫分时操作系统。响应实时的表现主要是抢占,抢占通过优先级来控制的,优先级高的任务最先占用CPU。

SCHED_OTHER,非实时的,需要注意的是这排队跟上WC一样,前面的人占用了位置,它不出来,第二个人是轮不上的。

SCHED_FIFO:实时任务调度策略,先到先服务。一旦占用cpu则一直运行,直到有更高优先级任务到达或自己放弃。

SCHED_RR,实时的分时调试策略,时间片轮转。当任务的时间片用完,系统将重新分配时间片,并置于就绪队列尾。放在队列尾保证了所有具有相同优先级的RR任务的调度公平。所以说SCHED_RR综合了前面两种方式。

理解了前面的概念其实只是知道了一部分,真正在应用的时候还需要注意很多,下面我总结一下我觉得还需要了解的一些注意点:

1,linux的任务有实时和分时之分,但它并不属于实时操作系统,因为在某些方面是尽量往实时响应上靠,但它的部分任务抢占在内核里还是需要等待内枋处理完才能得到CPU的。

2,linux默认的线程属性是SCHED_OTHER。我们需要注意有些线程在处理事务到一半的时候,CPU给其它线程干活去了。

3,使用实时策略时,如果有唯一一个优先级高的任务,当它抢占到CPU的时候,它不去sleep,或主动放弃CPU啊,那么其它优先级低的线程就只能死等了。所以像这种优先级高的任务一般干的活不会是一直占着时间片的,比如按键中断,中断来线程立即响应。如果你把中断线程设成分时的,哦哦,如果刚好线程比较多,一个线程100ms时间片,你想一下,一秒后响应按键不是不可能的。

4,在linux的内核和应用层设置优先级是不一样的,内核里是数字越小,优先级越高,应用里面反之。当时对于刚学习这个调试策略是比较晕的,因为大部分作者并没有说明是在内核级还是用户级里的优先级。

5,这三个策略是否可以同时存在,答案是肯定的。这种情况下实时策略在运行的时候,SCHED_OTHER它怎么得到CPU呢?linux有一个组策略就是分配实时和分时的时间片的,大家可以百度sched_rt_runtime_us和sched_rt_period_us.意思就是设定一个总单位时间和实时策略占用时间,剩下的不是分时策略时间。SCHED_OTHER占用的时间少,但总还是可以分得到的。比如大家在linux启动一个一直占用再去敲那命令行,系统还是会响应的,只是很慢。两个实时策略在调度的时候,也遵守优级高抢占,同级别排队的原则。

【转】 多线程之linux线程调度策略的更多相关文章

  1. Linux 线程调度策略与线程优先级

    Linux内核的三种调度策略 SCHED_OTHER 分时调度策略. 它是默认的线程分时调度策略,所有的线程的优先级别都是0,线程的调度是通过分时来完成的.简单地说,如果系统使用这种调度策略,程序将无 ...

  2. java多线程之:线程对象一些api

    一:wait()方法,wait(long timeout)--->锁对象调用wait()方法,让当前线程小a进入等待状态,阻塞住,并让出当先线程拥有的锁.--->直到其他线程用锁对象调用n ...

  3. java多线程之Lock线程同步

    1.线程同步: package cn.itcast.heima2; import java.util.concurrent.locks.Lock; import java.util.concurren ...

  4. java多线程之synchronized(线程同步)

    一.线程同步,主要应用synchronized关键字: public class TraditionalThreadSynchorinzed { public static void main(Str ...

  5. java 线程之executors线程池

    一.线程池的作用 平时的业务中,如果要使用多线程,那么我们会在业务开始前创建线程,业务结束后,销毁线程.但是对于业务来说,线程的创建和销毁是与业务本身无关的,只关心线程所执行的任务.因此希望把尽可能多 ...

  6. 多线程之Java线程阻塞与唤醒

    线程的阻塞和唤醒在多线程并发过程中是一个关键点,当线程数量达到很大的数量级时,并发可能带来很多隐蔽的问题.如何正确暂停一个线程,暂停后又如何在一个要求的时间点恢复,这些都需要仔细考虑的细节.在Java ...

  7. Java多线程之synchronized线程锁

    package org.study2.javabase.ThreadsDemo.sync; /** * @Auther:GongXingRui * @Date:2018/9/18 * @Descrip ...

  8. JAVA多线程之UncaughtExceptionHandler——处理非正常的线程中止

    JAVA多线程之UncaughtExceptionHandler——处理非正常的线程中止 背景 当单线程的程序发生一个未捕获的异常时我们可以采用try....catch进行异常的捕获,但是在多线程环境 ...

  9. linux下多线程之pthread_detach(pthread_self())

    写个碰到的问题,记录下自己的技术之路点滴pthread_detach(pthread_self())linux线程执行和windows不同,pthread有两种状态joinable状态和unjoina ...

随机推荐

  1. IO流-基础

    //创建输出流对象 FileWriter fw = new FileWriter("d:\\a.txt"); /* * 创建输出流对象做了哪些事情: * A:调用系统资源创建了一个 ...

  2. Markdon 作图语法 CSDN

    插入甘特图 gantt dateFormat YYYY-MM-DD title Adding GANTT diagram functionality to mermaid section 现有任务 已 ...

  3. 颠倒的价牌|2013年蓝桥杯A组题解析第四题-fishers

    颠倒的价牌 小李的店里专卖其它店中下架的样品电视机,可称为:样品电视专卖店. 其标价都是4位数字(即千元不等). 小李为了标价清晰.方便,使用了预制的类似数码管的标价签,只要用颜色笔涂数字就可以了(参 ...

  4. (转)开源项目miaosha(下)

    石墨文档:https://shimo.im/docs/2XlwliBQAYsKCHbq/ (二期)20.开源秒杀项目miaosha解读(下) [课程20]jmeter.xmind81.5KB [课程2 ...

  5. Flyway Overview and Installation

    https://flywaydb.org/documentation/ Flyway is an open-source database migration tool. It strongly fa ...

  6. 【Dalston】【第五章】API服务网关(Zuul) 上

    微服务场景下,每一个微服务对外暴露了一组细粒度的服务.客户端的请求可能会涉及到一串的服务调用,如果将这些微服务都暴露给客户端,那么客户端需要多次请求不同的微服务才能完成一次业务处理,增加客户端的代码复 ...

  7. 18 Issues in Current Deep Reinforcement Learning from ZhiHu

    深度强化学习的18个关键问题 from: https://zhuanlan.zhihu.com/p/32153603 85 人赞了该文章 深度强化学习的问题在哪里?未来怎么走?哪些方面可以突破? 这两 ...

  8. Python实现机器学习算法:线性回归

    import numpy as np from sklearn.datasets import load_diabetes from sklearn.utils import shuffle impo ...

  9. CommandLineParser命令行解析类

    目的:方便用户在命令行使用过程中减少工作量 以前版本没这个类时,如果要运行带参数的.exe,必须在命令行中输入文件路径以及各种参数,并且输入的参数格式要与代码中的if语句判断内容格式一样,一不小心就输 ...

  10. Leetcode122-Best Time to Buy and Sell Stock II-Easy

    Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...