【算法】【学习笔记】最早截止时间优先(EDF)

EDF

在力扣中遇到了一个题目——吃苹果的最大数目,先把就快臭了的苹果吃掉(😢不过现实的话,我还是偏向吃新鲜的先)。用到了EDF,所以记录一下概念,免得忘记了。

核心:使用最小堆

定义

最早截止时间优先(EDF)属于动态调度算法的一种,常用于实时操作系统中,用于调度具有明确截止时间的任务或进程。它是一种基于优先级的调度策略,其中截止时间越早的任务优先级越高

核心思想:尽可能降低任务错过截止时间的概率。

  • 每当有任务可调度时,系统会优先执行当前截止时间最早的任务
  • 如果多个任务截止时间相同,则优先执行优先级更高的任务

✅ 关键特性:

  • 适用于周期性任务调度
  • 在任务不会超时时必定能让所有任务完成
  • 是一种最优调度算法

重要问题:

在单核处理器上,如果一组任务在理论上存在一种“能让所有人都不超时”的排班方法,那么用 EDF 算法去排班,就一定能找到这个完美解。

所以在写算法题(特别是贪心算法)时,只要题目带有“过期”、“截止日期”、“订单截止时间”等特征,EDF 往往就是通往满分答案的绿色通道。

EDF 被广泛应用于分布式系统、网络、嵌入式系统、多媒体系统和实时控制系统等场景。

优缺点

优点

  • 可调度性保障
    只要总任务不会超时,就能保证所有任务按时完成。

  • 高资源利用率
    相比固定优先级调度算法,EDF 能更高效地利用 CPU 资源,提升系统整体吞吐量。

  • 动态适应能力强
    任务优先级动态变化,能适应任务周期或截止时间的变动,适用于复杂多变的实时环境。

缺点

  • 优先级倒置(Priority Inversion)
    低优先级任务可能因资源占用而阻塞高优先级任务,导致任务超时。

  • 系统过载(Overloading)
    当总任务时长超过了给定时长,无法保证所有任务按时完成,系统性能急剧下降。

  • 行为不可预测
    如果任务截止时间设置不合理,调度行为可能出现不可预测的情况。

  • 实现复杂度高
    在大规模实时系统中,EDF 的实现和分析较为复杂,尤其是涉及资源竞争和同步机制时。

实现方法

堆的实现

在此文就不阐述了,可以跳转【数据结构】【学习笔记】堆查看。

简单思路(无周期)

可以使用最小堆,以截止时间为排序标签,将任务都塞入最小堆中;

然后每次检查堆顶是否已过期,过期则弹出,否则继续进行,直到进行完。

有周期时

要在对应周期时,将任务和对应截止时间重新载入到最小堆中。

引用

[1]最早截止时间优先调度算法(EDF)详解 | Baeldung中文网

posted @ 2026-07-20 22:51  SEHOD  阅读(3)  评论(0)    收藏  举报