标准答案

  1. 可以使用多个优先级队列和加权调度,明确每类任务的并发和最大等待时间。
  2. 老化机制逐渐提升等待过久的任务优先级,或为低优先级保留固定执行槽。
  3. 任务过期、取消、失败和重试都要保留状态,重试不能无条件提升优先级压住新任务。
  4. 监控各级队列长度、最老任务、执行比例和拒绝率。

题目解析

优先级调度首先要定义业务价值、最大等待时间和资源上限。高优先级无限抢占会保护局部请求,却可能让低优先级任务永久饥饿,甚至让高优任务本身把下游打满。

常见做法是多个队列加权调度、低优先级保底槽位或等待老化。任务过期、取消和失败重试要保留状态,重试不能无条件回到最高优先级。

验证应看各级队列长度、最老任务、执行比例、拒绝率和下游错误,确认优先级确实对应用户影响,而不是只看高优队列清空速度。

常见误区

  • 误区:严格按优先级永远先处理高优任务。改正:加入老化、权重或低优先级保底,避免饥饿。
  • 误区:没有老化或低优先级保底。改正:定义最大等待时间和最低执行配额,并监控最老任务。
  • 误区:失败重试无限占用高优队列。改正:限制重试次数和资源,必要时转入专门的失败队列或人工处理。

作者信息