进程调度负责在可运行任务之间分配 CPU 时间。它连接了吞吐量、响应时间、公平性和系统开销。
关键目标
- 响应时间:交互式任务希望尽快得到反馈。
- 吞吐量:批处理任务希望单位时间内完成更多工作。
- 公平性:不同进程不应长期饥饿。
- 开销控制:上下文切换不能过于频繁。
简化模型
下面是一段非常小的伪代码,用来描述轮转调度的形状。
type Task = {
id: string;
remaining: number;
};
export function roundRobin(queue: Task[], quantum: number) {
const timeline: string[] = [];
while (queue.length > 0) {
const task = queue.shift()!;
const slice = Math.min(task.remaining, quantum);
timeline.push(`${task.id}:${slice}`);
task.remaining -= slice;
if (task.remaining > 0) {
queue.push(task);
}
}
return timeline;
}
复习问题
- 时间片过大会发生什么?
- 时间片过小会带来什么额外成本?
- 为什么交互式系统更关心响应时间?