🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] ## 应用 - 操作系统领域 - Yarn调度 Hadoop集群 - Quartz调度任务 - Spring调度请求响应 - React Fiber调度绘制任务 - Apache Flink调度作业 ## 调度 - 被调度任务的特征(计算密集型 vs IO 密集型) - 执行时机 - 新任务何时执行 - 任务临时终止如何选择下一个任务 - 任务阻塞如何选择下一个任务 - 发生中断时(外部环境变化时)如何响应 - 调度算法(抢占式算法、非抢占式算法等 ### 调度的通用目标 - 公平—每个进程公平的分享cPU份额 - 策略强制执行——保证规定的策略被执行 - 平衡——保持系统尽可能忙碌 ### 不同系统的不同目标 - 批处理系统(吞吐量、周转时间、CPU利用率) - 需要保证中途不能中断 - 交互式系统(响应性、体验) - 需要保证相应性(如:玩游戏时,需要保证网络不卡) - 实时系统 (精准,稳定) ## 抢占式vs非抢占式 - 抢占式:任务分时(时间片用完、更高优先级抢占等 - 非抢占式:任务不分时(执行直到被阻塞) ## 系统的区别 - 作业系统 - 特点:不可抢占X - 保险客诉,联通客服 - 交互式系统 - 特点:分时、抢占 - 举例: Windows, Android - 实时系统 - 特点:完成时间确定 ## 算法 ### Round Robin (轮询调度算法) ``` queue.add(p1) queue.add(p2) queue.add(p3 while(true){ process= queue.dequeue() process.exec() if(!process finished) queue.enqueue(process) } ``` ### 优先级调度 ``` priorityQueue.add(p1) priorityQueue.add(p2) priorityQueue.add(p3) while(true){ process=priorityQueue.dequeue() process..exec() if(!process.finished) priorityQueue.enqueue(process) } ``` q:相同优先级如何处理? a:相同优先级可以考虑用【最短作业优先】法 ![](https://img.kancloud.cn/0a/f6/0af67bd403f6a0ff348322b8371376d0_1038x550.png)