转自: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系统是抢占式多任务操作系统,是否要将一个进程立刻投入运行(也就是抢占当前进程),完全由该进程的优先级和是否有时间片来决定.但 CFS调度器:抢占时机取决于新的可执行程序消耗了多少处理器使用比 ...

  2. ZT 为什么pthread_cond_t要和pthread_mutex_t同时使用 || pthread/Linux多线程编程

    为什么线程同步的时候pthread_cond_t要和pthread_mutex_t同时使用 (2009-10-27 11:07:23) 转载▼ 标签: 杂谈 分类: 计算机 举一个例子(http:// ...

  3. Linux多线程的同步------读写锁

    前面介绍过Linux多线程同步的另外两个方法------互斥锁和信号量 Linux多线程的同步-----信号量和互斥锁_神厨小福贵!的博客-CSDN博客 下面来看一下读写锁: 读写锁和互斥锁都带有一个 ...

  4. Linux多线程的同步-----信号量和互斥锁

    前面两篇给基本概念讲过了,大家有兴趣的可以去看一下: Linux多线程_神厨小福贵!的博客-CSDN博客进程和线程的区别有哪些呢?进程是资源分配的最小单位,线程是CPU调度的最小单位进程有自己的独立地 ...

  5. Linux 多线程应用中编写安全的信号处理函数

    2019独角兽企业重金招聘Python工程师标准>>> Linux 多线程应用中编写安全的信号处理函数 在 开发多线程应用时,开发人员一般都会考虑线程安全,会使用 pthread_m ...

  6. linux 内核信号量与用户态信号量(system v,信号量在Linux多线程机制中的应用

    [摘 要]本文以信号量原理为基础,重点阐述信号量在Linux多线程同步机制中的实现特色. [关键词]信号量:Linux:多线程:同步 1 信号量 1965年E. W. Dijkstra首次提出信号量的 ...

  7. 新书预告:《Linux 多线程服务端编程——使用 muduo C++ 网络库》

    看完了 W. Richard Stevens 的传世经典<UNIX 网络编程>, 能照着例子用 Sockets API 编写 echo 服务, 却仍然对稍微复杂一点的网络编程任务感到无从下 ...

  8. linux多线程编写哲学家,Linux系统编程(三) ------ 多线程编程

    一.线程的创建和调度 1.线程是程序执行的某一条指令流的映像. 为了进一步减少处理机制的空转时间,支持多处理器及减少上下文切换开销,进程在演化中出现了另一个概念--线程.它是进程内独立的一条运行路线, ...

  9. linux多线程信号总结

    linux多线程信号总结-businiaowyf-ChinaUnix博客 linux 多线程信号处理总结 - CobbLiu - 博客园

最新文章

  1. 【PAT乙级】1073 多选题常见计分法 (20 分)
  2. eclipse工程 'cocostudio/CocoStudio.h' file not found
  3. 蓝桥杯 ADV-202 算法提高 最长公共子序列
  4. apache camel_使用Java的Apache Camel入门
  5. [html] 你能否画出一个0.5px的直线?
  6. Phaser3让超级玛丽实现轻跳、高跳及加上对应的跳跃声音
  7. 工作实践 之 Google Guava 工具集的使用 ,提高效率
  8. javamail 解码 base64 html格式邮件_[源码和文档分享]基于JavaMail的邮件收发系统
  9. 转SFTP 和FTPS的区别是什么?
  10. cocos js响应过程
  11. chrome vue 未响应_vue之骨架屏踩坑之路
  12. 试验笔记 - Eclipse的.class反编译插件
  13. 一键杀死最近打开APP
  14. 一个迷茫的 大学生自学Linux的开始
  15. Java Web从前端到后台常用框架介绍
  16. java manager 模式_java设计模式之装饰器模式(Decorator)
  17. [计算机网络-03] 数据链路层
  18. 4G 工业路由器并入cisco专网
  19. CodeForces 85D Sum of Medians Splay | 线段树
  20. Bailian4005 拼点游戏【贪心】

热门文章

  1. Linux shell中的竖线(|)——管道符号
  2. 基于飞腾FT-2000/4-DSK ROS安装(ubuntu18.04.4LTS)
  3. rails中arity的使用
  4. Redis监控和告警
  5. 如何配置SQL Server数据库远程连接
  6. IoGetDeviceProperty 例程
  7. 3dMax的UV贴图和UV展开完全指南
  8. Vue文件上传问题合集
  9. vue前端实现上传文件的两种方式
  10. Datawhale 智慧海洋建设-Task1