多级反馈队列 Multi-level Feedback Queue MLFQ
多级反馈队列 Multi-level Feedback Queue MLFQ
MLFQ中有许多独立的队列(queue),每个队列有不同的优先级(prioritylevel)。任何时刻,一个工作只能存在于一个队列中。MLFQ总是优先执行较高优先级的工作(即在较高级队列中的工作)
如果一个进程是交互型任务,比如键盘输入,MLFQ会让他保持高优先级。如果一个工作长时间占用CPU,MLFQ会将它挪动到低优先级队列。
MLFQ规则
- 规则1: 如果A的优先级 > B的优先级, 运行A(不运行B)。
- 规则2: 如果A的优先级 = B的优先级,轮转运行A和B。
- 规则3: 工作进入系统时,放在最高优先级(最上层队列)。
- 规则4: 一旦工作用完了其在某一层中的时间配额(无论中间主动放弃了多少次CPU),将降低其优先级(移入低一级队列)。
- 规则5: 经过一段时间S后,就将系统中所有工作重新加入最高优先级队列。
其中规则3是为了保证新加入的任务能首次获得CPU的执行权。
规则4 是为了防止有些任务故意释放CPU,然后系统保持它的优先级。
规则5是为了避免某些IO交互任务长时间频繁得到CPU,长工作永远得不到CPU。另外如果一个计算密集型的任务在某段时间表现为一个交互性的任务,它不会享受到系统中其他交互性任务的待遇。
优化
有解决的问题:
- 配置多少队列?
- 每一层队列的时间片配置多大?
- 为了避免饥饿问题以及进程行为改变,应该多久提升一次进程的优先级?
大多数MLFQ变体支持:
- 高优先级队列配置较短的时间片,比如10ms或者更少
- 低优先级配置更长的时间片。
- 通过配置,数学公式来调整优先级。比如linux 系统中nice工具
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
2018-12-19 读取excel合并单元格内容
2018-12-19 将celery定时任务设置为根据本地时区触发