Linux SCHED_FIFO, SCHED_RR和SCHED_OTHER
SCHED_FIFO: 先进先出调度在先进先出的调度方式下,一个线程直到它被更高优先级的线程抢占或者运行结束,才会交出控制权。相同优先级的任务不能打断该线程。当线程完成后,内核会去寻找处于就绪状态相同优先级的线程,如果不存在, 则寻找低优先级线程。FIFO调度本身实现了数据的互斥, 在线程运行的时间内其他相同优先级线程无法进行资源抢占。
SCHED_RR: 时间片轮转调度在时间片轮转(RR: RoundRobin)调度下,一个线程放弃内核有三种情况:运行结束,被更高级优先级抢占或者消耗完自己的时间片。时间片是线程运行的最小时间单元,由操作系统预先设定。当时间片用完时,该线程自动交出控制权, 之后内核会按照和FIFO相同的方式搜索下一个工作线程。轮转调度可以防止某一个任务连续占用太多的资源,而导致其他线程信息得不到及时处理。缺点是轮转调度会增大由于任务切换而导致的开销。
SCHED_OTHER: 分时调度,一般采用CFS算法,CFS定义了一种新调度模型,它给cfs_rq(cfs的run queue)中的每一个进程都设置一个虚拟时钟-virtual runtime(vruntime)。如果一个进程得以执行,随着执行时间的不断增长,其vruntime也将不断增大,没有得到执行的进程vruntime将保持不变。
而调度器将会选择最小的vruntime那个进程来执行。这就是所谓的“完全公平”。不同优先级的进程其vruntime增长速度不同,优先级高的进程vruntime增长得慢,所以它可能得到更多的运行机会。
Linux SCHED_FIFO, SCHED_RR和SCHED_OTHER相关推荐
- Linux 调度策略 SCHED_OTHER SCHED_FIFO SCHED_RR SCHED_BATCH SCHED_IDLE
Linux 调度策略的类型大致可以分为 TSS (分时系统)和实时系统这两种.一方面.一般的进程是通过分时运行的.也就是说.使用 CPU 的时间达到分配给进程的时间(时间片)时,就会切换到其他进程.这 ...
- SCHED_OTHER/SCHED_FIFO/SCHED_RR
调度算法要求:高资源利用率.高吞吐量.用户满意等原则. 进程调度所采用的算法是与整个系统的设计目标相一致的: 1.批处理系统:增加系统吞吐量和提高系统资源的利用率; 2.分时系统:保证每个分时用户能容 ...
- Linux多线程实践(3) --线程属性
初始化/销毁线程属性 int pthread_attr_init(pthread_attr_t *attr); int pthread_attr_destroy(pthread_attr_t *att ...
- linux内核线程优先级设置,Linux c 线程属性,线程优先级的修改
Linux c 线程属性,线程优先级的修改 发布时间:2018-07-19 10:24, 浏览次数:1290 , 标签: Linux 线程属性的设置,网上找的文章总感觉不够全面,还是结合man手册查看 ...
- unix设置线程优先级-转
如何在linux/unix中设置线程的优先级 int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*sta ...
- C++ 多线程编程(二):pthread的基本使用
在C++开发中,原生的线程库主要有两个,一个是C++11提供的<thread>(std::thread类),另一个是Linux下的<pthread.h>(p_thread类), ...
- NuttX的学习笔记 8
好了,新开一篇继续新的内容 Task Scheduling Interfaces sched_setparam sched_getparam sched_setscheduler sched_gets ...
- linux文件描述符与标识符,文件描述符fd
这里以问答的方式来讨论这个问题: 1. 文件描述符 fd 和文件指针 FILE *的关系? 文件描述符是什么?我们知道每一个进程都有一个自己的PCB(进程控制块),进程控制块的结构是: struct ...
- 嵌入式linux内存使用和性能优化
这本书有两个关切点:系统内存(用户层)和性能优化. 这本书和Brendan Gregg的<Systems Performance>相比,无论是技术层次还是更高的理论都有较大差距.但是这不影 ...
最新文章
- 游戏AI之初步介绍(0)
- connection reset by peer问题总结及解决方案
- 斐波那契数拓展问题:leetcode-70 爬楼梯问题 leetcode-1137 泰波那契数问题解法
- 语义化版本(semantic versioning)机制里的一些范围标识符
- 教你玩转CSS Position(定位)
- python 编码 解码 读写文件
- PL/pgSQL学习笔记之六
- nodeJs 接收请求参数和发送请求参数
- nginx简单的rewrite配置
- 软件项目演示的注意事项
- 中标麒麟系统成功安装英伟达显卡驱动程序记
- scrapy爬虫之贝壳房产信息
- 2022泰迪杯a题害虫检测
- 思科和思杰联袂提供全面的桌面虚拟化解决方案
- 华硕路由器共享打印机手记
- 胜天半子丨数字化供应链中台解决方案能给品牌商带来怎样的机遇变化?
- Confluence 6 修改默认空间标识图片
- Github+Hexo搭建个人博客(图文详解)
- 可编辑的日历控件_选择正确的WordPress编辑日历插件
- java util:全国省市工具类
热门文章
- 卡西欧发布与红牛二队最新合作的高性能运动手表
- ASP.NET入门随想六之大航海家(1)
- 天纵智能软件快速开发平台网格编辑插件
- IDEA配置TestNG
- Linux Shell - echo 命令输出格式
- Principles for Microservice Design: Think IDEALS SOLID
- 华为OD机试(JAVA)真题 -- 分苹果
- python执行pyc文件_Python 编译:code对象 与 pyc文件
- python 内置属性__setattr___python魔法方法之__setattr__()
- SpringBoot2学习笔记01-基础