【转】 多线程之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 ...
随机推荐
- 51Nod 1667 概率好题 - 容斥原理
题目传送门 无障碍通道 有障碍通道 题目大意 若$L_{i}\leqslant x_{i} \leqslant R_{i}$,求$\sum x_{i} = 0$以及$\sum x_{i} < 0 ...
- Codeforces 798D Mike and distribution - 贪心
Mike has always been thinking about the harshness of social inequality. He's so obsessed with it tha ...
- Codeforces Round #424 (Div. 2, rated, based on VK Cup Finals) Problem D (Codeforces 831D) - 贪心 - 二分答案 - 动态规划
There are n people and k keys on a straight line. Every person wants to get to the office which is l ...
- java 静态代理总结
首先:定义一个抽象类或借口 例: package JingTai; public interface JingTai1 { public void show(); } 接着:定义一个被代理的类,他需要 ...
- HihoCoder 1634 Puzzle Game(最大子矩阵和)题解
题意:给一个n*m的矩阵,你只能选择一个格子把这个格子的数换成p(也可以一个都不换),问最大子矩阵和最小可能是多少? 思路: 思路就是上面这个思路,这里简单讲一下怎么n^3求最大子矩阵和:枚举两行(或 ...
- How Flyway works
The easiest scenario is when you point Flyway to an empty database. It will try to locate its schema ...
- Codeforces Round #535 (Div. 3) 解题报告
CF1108A. Two distinct points 做法:模拟 如果两者左端点重合就第二条的左端点++就好,然后输出左端点 #include <bits/stdc++.h> usin ...
- HDU 4309 Seikimatsu Occult Tonneru(最大流+二进制枚举)
http://acm.hdu.edu.cn/showproblem.php?pid=4309 题意: 有n个城市,每个城市有num[i]个居民,有敌人要进行地毯式轰击,居民们要逃到隧道去.现在有隧道, ...
- fee photo
别样网 pexels Gratisography picjumbo lifeofpix foodiesfeed
- 一步到位之INNODB
原文链接:http://imysql.com/2012/09/21/mysql-faq-setup-innodb-quickly.html 快速认识InnoDB InnoDB是MySQL下使用最广泛的 ...