长短任务怎么排?
比较平均完成时间、尾延迟、makespan及公平性。
合成教学数据 · 未运行真实模型静态推演与完整规格
I16 长短任务怎么排?
关联章节:M08 · 交互类型:scheduler · 状态:提供纯逻辑参考函数,UI待实现
教学目标
比较平均完成时间、尾延迟、makespan及公平性。
初始状态
{
"jobs": [
{
"id": "long",
"arrival": 0,
"duration": 8
},
{
"id": "s1",
"arrival": 0,
"duration": 1
},
{
"id": "s2",
"arrival": 0,
"duration": 1
}
],
"policy": "fifo",
"workers": 1
}
操作控件
FIFO/SJF切换
修改到达/时长
worker数量1–4
单步时间线
比较表格
重置
状态变化规则
非抢占调度,只有ready任务可选择。
时长已知仅为教学假设;相同时按到达/输入顺序。
显示每任务等待/开始/结束、平均完成时间、makespan。
黄金案例与反馈
fifo
输入:
{
"policy": "fifo",
"workers": 1
}
期望:
{
"end_times": [
8,
9,
10
],
"mean_completion": 9,
"makespan": 10
}
短任务被长任务阻塞。
sjf
输入:
{
"policy": "sjf",
"workers": 1
}
期望:
{
"end_times": [
1,
2,
10
],
"mean_completion": 4.333333333333333,
"makespan": 10
}
平均改善但总工作量没变。
parallel
输入:
{
"policy": "fifo",
"workers": 2
}
期望:
{
"makespan": 8
}
并发不是无限资源;可加租户额度讨论。
完成条件
预测并核对两策略
指出SJF的时长预测与饥饿问题
反馈层次
提交预测后显示结果;允许跳过预测但记录跳过,不阻止阅读
结果同时显示状态变化、原因与被拒绝动作;不是只给红绿灯
第一次错误给边界提示,第二次提供最小反例;参考推导始终可主动打开
重置恢复固定初始状态并保留历史尝试供用户手动清除
无障碍与静态替代
全部操作有原生button/input/select替代,不依赖拖拽
图与动画提供同步文字状态表;支持prefers-reduced-motion
状态改变用aria-live=polite摘要,不逐字朗读长日志
焦点不跳走;错误提示关联输入;颜色不是唯一编码
无JavaScript时直接展示初始输入、规则和黄金案例表,读者仍能完成纸面推演。状态动画仅作解释,不能成为获取答案的唯一途径。
持久化与重置
使用版本化键agent-course:1:I16,仅保存本地学习状态。支持单卡重置和全站清除;存储失败时以内存模式继续,不阻断阅读。
必须避免的误导
不要把已知真实duration的oracle比较称作可直接部署的最优调度器。
执行边界
纯本地教学状态机;不执行任意代码,不连接真实资金/模型/宿主Shell。
逻辑参考
web/reference/engines.mjs中的schedule;对应测试在web/reference/engines.test.mjs。UI可复用或等价移植,但不得改变黄金结果。