时间轮:高效定时任务管理核心。

时间轮(TimingWheel)的核心原理

时间轮是一种高效管理定时任务的算法,常用于大数据处理框架(如Kafka、Netty)中。其核心思想是通过环形数组模拟时钟,每个槽位对应一个时间间隔,任务根据到期时间分配到对应槽位。时间轮分为单层和多层结构,单层适用于短周期任务,多层可扩展至长周期场景。

时间轮的指针以固定频率推进(例如每秒一格),触发当前槽位的任务执行。若任务周期超过时间轮总跨度,则通过递归或层级化处理。这种设计将任务调度复杂度从O(n)降至O(1),显著优于传统优先级队列。

时间轮的数据结构实现

以下是一个简化版单层时间轮的Java实现示例,包含核心逻辑:

public class TimingWheel {
    private final long tickDuration; // 每个槽位的时间跨度(毫秒)
    private final int wheelSize;     // 槽位数量
    private final long interval;     // 总时间跨度 = tickDuration * wheelSize
    private final AtomicLong currentTime; // 当前指针位置(毫秒)
    private final List<TimerTask>[] buckets; // 槽位数组

    // 初始化时间轮
    public TimingWheel(long tickDuration, int wheelSize) {
        this.tickDuration = tickDuration;
        this.wheelSize = wheelSize;
        this.interval = tickDuration * wheelSize;
        this.currentTime = new AtomicLong(System.currentTimeMillis());
        this.buckets = new List[wheelSize];
        for (int i = 0; i < wheelSize; i++) {
            buckets[i] = new CopyOnWriteArrayList<>();
        }
    }

    // 添加任务
    public void addTask(TimerTask task) {
        long expiration = task.getExpiration();
        if (expiration < currentTime.get() + tickDuration) {
            // 立即执行
            task.run();
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值