【转】 多线程之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 ...
随机推荐
- [c/c++] programming之路(5)、吓人小程序、变量、进制等
一.设计一个吓人的东西 首先创建MFC项目(勾选“基于对话框”后点击完成即可) 添加三个按钮 双击按钮进入响应代码段 void CMFCWindowsDlg::OnBnClickedButton1() ...
- Python3 tkinter基础 Label 显示的文字换行
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- Python3基础 e记法示例
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- Linux系统PWM驱动【转】
本文转载自:https://blog.csdn.net/BorntoX/article/details/51879786 硬件平台:IMX6 内核版本:kernel3.0.35 在linux内核中有一 ...
- TV Show Game 【2-SAT】
问题 K: TV Show Game 时间限制: 1 Sec 内存限制: 512 MB Special Judge 提交: 51 解决: 10 [提交] [状态] [命题人:admin] 题目描 ...
- tp剩余未验证内容
new Image(宽度,高度) $(image).attr('src', ...).load(function(){....}) load表示浏览器从服务器下载(装载)对象完成, 这个load方法很 ...
- 总结: 在fc23中, 安装音频mp3 视频flv 的播放插件其实很简单, 只要一步就可以了: dnf install gstreamer1-libav
同样是 firefox, 单词的在线发音, 跟 百度mp3的在线播放不是一样的!!! 百度/优酷 的在线播放, 用的确实是 flash player , 所以 你安装好libflashplayer后, ...
- 播放器smplayer的各种键盘快捷键
smplayer的很多键盘快捷键都是 "单字母"命令. 如: f, m命令等 有主工具栏, 是通过F5来进行切换的, 但是单击f5后"可能"会使窗口失去焦点, ...
- 题解——CF Manthan, Codefest 18 (rated, Div. 1 + Div. 2) T1(找规律)
就是找一下规律 但是奈何昨天晚上脑子抽 推错了一项QwQ 然后重新一想 A掉了QwQ #include <cstdio> #include <algorithm> #inclu ...
- 【前端开发工具】WijmoJS 2018 v3 正式发布,全面支持Angular7
WijmoJS(前端开发工具包)2018年度第三个大版本已经正式发布,本次更新除了全面支持Angular7之外,还允许用户使用Web Workers在前端更高效地导出PDF.智能的分组表头属性.全新的 ...