【算法】【学习笔记】最早截止时间优先(EDF)
EDF
在力扣中遇到了一个题目——吃苹果的最大数目,先把就快臭了的苹果吃掉(😢不过现实的话,我还是偏向吃新鲜的先)。用到了EDF,所以记录一下概念,免得忘记了。
核心:使用最小堆。
定义
最早截止时间优先(EDF)属于动态调度算法的一种,常用于实时操作系统中,用于调度具有明确截止时间的任务或进程。它是一种基于优先级的调度策略,其中截止时间越早的任务优先级越高。
核心思想:尽可能降低任务错过截止时间的概率。
- 每当有任务可调度时,系统会优先执行当前截止时间最早的任务。
- 如果多个任务截止时间相同,则优先执行优先级更高的任务。
✅ 关键特性:
- 适用于周期性任务调度
- 在任务不会超时时必定能让所有任务完成
- 是一种最优调度算法
重要问题:
在单核处理器上,如果一组任务在理论上存在一种“能让所有人都不超时”的排班方法,那么用 EDF 算法去排班,就一定能找到这个完美解。
所以在写算法题(特别是贪心算法)时,只要题目带有“过期”、“截止日期”、“订单截止时间”等特征,EDF 往往就是通往满分答案的绿色通道。
EDF 被广泛应用于分布式系统、网络、嵌入式系统、多媒体系统和实时控制系统等场景。
优缺点
优点
-
可调度性保障
只要总任务不会超时,就能保证所有任务按时完成。 -
高资源利用率
相比固定优先级调度算法,EDF 能更高效地利用 CPU 资源,提升系统整体吞吐量。 -
动态适应能力强
任务优先级动态变化,能适应任务周期或截止时间的变动,适用于复杂多变的实时环境。
缺点
-
优先级倒置(Priority Inversion)
低优先级任务可能因资源占用而阻塞高优先级任务,导致任务超时。 -
系统过载(Overloading)
当总任务时长超过了给定时长,无法保证所有任务按时完成,系统性能急剧下降。 -
行为不可预测
如果任务截止时间设置不合理,调度行为可能出现不可预测的情况。 -
实现复杂度高
在大规模实时系统中,EDF 的实现和分析较为复杂,尤其是涉及资源竞争和同步机制时。
实现方法
堆的实现
在此文就不阐述了,可以跳转【数据结构】【学习笔记】堆查看。
简单思路(无周期)
可以使用最小堆,以截止时间为排序标签,将任务都塞入最小堆中;
然后每次检查堆顶是否已过期,过期则弹出,否则继续进行,直到进行完。
有周期时
要在对应周期时,将任务和对应截止时间重新载入到最小堆中。

浙公网安备 33010602011771号