调度
最后更新于:2022-04-02 04:08:52
[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://docs.gechiui.com/gc-content/uploads/sites/kancloud/0a/f6/0af67bd403f6a0ff348322b8371376d0_1038x550.png)
';