这是 Beta 探索课程,内容结构、实验步骤和示例可能会继续调整。
时间轮
时间轮适合处理大量定时任务,尤其是在任务数量很大但调度精度可以按时间槽划分的场景。它的核心思想是把未来时间切成多个槽位,任务按到期时间放入对应槽位,调度线程像时钟指针一样向前移动,到达某个槽位时批量触发其中的任务。
本章会先从单层时间轮讲起:槽位数量决定可覆盖的时间范围,tick 间隔决定调度精度,任务插入只需要计算目标槽位。相比每次都从有序集合里查最小时间,时间轮可以用接近 O(1) 的方式完成插入和推进,因此常用于网络超时、连接管理、心跳检测和高并发定时器。
单层时间轮也有明显限制:如果延迟时间超过一圈,就需要记录剩余轮数;如果任务跨度从秒级到天级,单层结构会浪费大量槽位。分层时间轮通过秒、分钟、小时等多层结构降低空间浪费,但也带来任务下沉、层级推进和边界时间处理的复杂度。
把时间轮放进延时队列系统时,还要处理持久化和恢复。内存时间轮调度很快,但进程重启会丢失任务,因此生产系统通常把任务持久化到数据库或日志,再把近期任务加载进时间轮。长期任务存储在外部系统,到接近执行时间时再进入内存调度层。
完成本章后,你会理解时间轮为什么高效,也会知道它不是替代所有方案的银弹。它适合高并发、短中期、可容忍槽位精度的定时调度;如果业务更重视持久化查询、任意取消和审计,仍然需要和数据库、Redis 或消息队列组合使用。