【转】 多线程之linux线程调度策略
转自: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线程调度策略的更多相关文章
- Linux 线程调度策略与线程优先级
Linux内核的三种调度策略 SCHED_OTHER 分时调度策略. 它是默认的线程分时调度策略,所有的线程的优先级别都是0,线程的调度是通过分时来完成的.简单地说,如果系统使用这种调度策略,程序将无 ...
- java多线程之:线程对象一些api
一:wait()方法,wait(long timeout)--->锁对象调用wait()方法,让当前线程小a进入等待状态,阻塞住,并让出当先线程拥有的锁.--->直到其他线程用锁对象调用n ...
- java多线程之Lock线程同步
1.线程同步: package cn.itcast.heima2; import java.util.concurrent.locks.Lock; import java.util.concurren ...
- java多线程之synchronized(线程同步)
一.线程同步,主要应用synchronized关键字: public class TraditionalThreadSynchorinzed { public static void main(Str ...
- java 线程之executors线程池
一.线程池的作用 平时的业务中,如果要使用多线程,那么我们会在业务开始前创建线程,业务结束后,销毁线程.但是对于业务来说,线程的创建和销毁是与业务本身无关的,只关心线程所执行的任务.因此希望把尽可能多 ...
- 多线程之Java线程阻塞与唤醒
线程的阻塞和唤醒在多线程并发过程中是一个关键点,当线程数量达到很大的数量级时,并发可能带来很多隐蔽的问题.如何正确暂停一个线程,暂停后又如何在一个要求的时间点恢复,这些都需要仔细考虑的细节.在Java ...
- Java多线程之synchronized线程锁
package org.study2.javabase.ThreadsDemo.sync; /** * @Auther:GongXingRui * @Date:2018/9/18 * @Descrip ...
- JAVA多线程之UncaughtExceptionHandler——处理非正常的线程中止
JAVA多线程之UncaughtExceptionHandler——处理非正常的线程中止 背景 当单线程的程序发生一个未捕获的异常时我们可以采用try....catch进行异常的捕获,但是在多线程环境 ...
- linux下多线程之pthread_detach(pthread_self())
写个碰到的问题,记录下自己的技术之路点滴pthread_detach(pthread_self())linux线程执行和windows不同,pthread有两种状态joinable状态和unjoina ...
随机推荐
- Item的anchors属性
1.anchors group: anchors.top : AnchorLine anchors.bottom : AnchorLine anchors.left : AnchorLine anch ...
- log4j的基本使用方法
本文转载自http://www.codeceo.com/article/log4j-usage.html 一.基本用法 1.log4j需要jar包log4j-1.2.14.jar,链接: http:/ ...
- if语句题目练习
#print("您好") # # count=1 #count 表示计数 # while count<=8: # print("你是小学僧吗?") # p ...
- 排它平方数|2013年蓝桥杯A组题解析第二题-fishers
排它平方数 小明正看着 203879 这个数字发呆. 原来,203879 * 203879 = 41566646641 这有什么神奇呢?仔细观察,203879 是个6位数,并且它的每个数位上的数字都是 ...
- 关于C#引用ExceptionPolicy.HandleException(ex, "LogAndReplace", out exceptionToReplace);
http://www.cnblogs.com/Terrylee/archive/2006/07/03/enterprise_library2_1.html 要使用ExceptionPolicy.Han ...
- 题解——洛谷P2734 游戏A Game 题解(区间DP)
题面 题目背景 有如下一个双人游戏:N(2 <= N <= 100)个正整数的序列放在一个游戏平台上,游戏由玩家1开始,两人轮流从序列的任意一端取一个数,取数后该数字被去掉并累加到本玩家的 ...
- 论文阅读之: Hierarchical Object Detection with Deep Reinforcement Learning
Hierarchical Object Detection with Deep Reinforcement Learning NIPS 2016 WorkShop Paper : https://a ...
- [bug] - 关于poi导入excel时间格式会减少8小时的问题.
这个bug发生在使用poi组件导入导出excel时,(这里是导入) 首先在excel中的格式设定是 yyyy-mm-dd hh:mm:ss 通过配套使用ExcelUtil中 getCellValue( ...
- ElasticSearch实战——.Net Core中的应用
dll引用: NLog.Targets.ElasticSearch,版本:4.0.0-beta26 Nlog,版本:4.5.0-rc04 Microsoft.Extensions.Configurat ...
- ESP8266 使用
ESP8266 微机使用串口和ESP8266建立通信,ESP8266把消息通过wifi发送出去 助手软件 网络调试助手 串口调试助手 AT指令 指令 作用 AT 测试是否进入AT模式 AT+RST 重 ...