V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
IIInsomnia
V2EX  ›  Go 编程语言

分层时间轮的实现

  •  
  •   IIInsomnia ·
    shenghui0779 · 1 天前 · 2126 次点击

    一直找不到合适的 Go 时间轮库,正好工作需要,就自己实现了一个

    https://github.com/noble-gase/xe/tree/main/timewheel

    17 条回复    2025-08-28 21:28:35 +08:00
    aliipay
        1
    aliipay  
       1 天前
    想知道多个 Level 时候,最上层 level 到期后(比如 23 点 59 分 59 秒),大量任务需要重新分配 bucket ,如何保证系统平稳呢?
    momowei
        2
    momowei  
       1 天前   ❤️ 1
    时间轮主要用来解决啥问题
    phatzhong24
        3
    phatzhong24  
       1 天前
    @momowei #2 定时任务?
    dlmy
        4
    dlmy  
       1 天前   ❤️ 2
    以前为了完成 KPI ,在公司手撸了一个时间轮
    sngxx
        5
    sngxx  
       1 天前
    @dlmy 图画得好啊,怎么学的
    dlmy
        6
    dlmy  
       1 天前
    @sngxx 用了 4 年 DDD ,画了 8000 多张图,纯手撸练出来的
    yianing
        7
    yianing  
       1 天前   ❤️ 1
    @momowei 延时队列
    NoKey
        8
    NoKey  
       1 天前
    @dlmy 你这个是什么工具画的啊
    nobot
        9
    nobot  
       1 天前
    这个不是顺手就来的吗?没个项目中都要收录一个,C++版,go 版,C#版,php 版
    dlmy
        10
    dlmy  
       1 天前
    BBCCBB
        11
    BBCCBB  
       1 天前
    看 kafka 的源码, 2, 300 行代码就能撸一个出来.
    lazydog
        12
    lazydog  
       1 天前
    @dlmy #4 太牛了
    IIInsomnia
        13
    IIInsomnia  
    OP
       23 小时 1 分钟前
    @aliipay 每次到点,都是将目标槽位的链表摘下,换一个新的上去;异步处理摘下的链表中的任务,互不影响
    aliipay
        14
    aliipay  
       20 小时 56 分钟前
    @IIInsomnia 如果任务数量巨大,怎么保证能在一个最小定时间隔周期内完成呢,如果完不成就可能会导致任务丢失或者推迟到下一个分层完成
    IIInsomnia
        15
    IIInsomnia  
    OP
       17 小时 32 分钟前
    @aliipay 并发执行的,每个任务的执行都是独立的,且只会在最小的那个分层执行
    IIInsomnia
        16
    IIInsomnia  
    OP
       17 小时 24 分钟前
    @aliipay 时间轮是保证任务到时间被执行即可,至于执行多久跟时间轮无关了
    jones2000
        17
    jones2000  
       11 小时 31 分钟前
    任务优先级没有体现出来, 当来了一个优先级很高的任务,如果机器 CPU , 内存使用多, 会导致优先级高的任务,无法快速完成, 需要把正在执行的低优先级任务的中间数据和状态存盘,停止这个任务,释放内存。 当高优先级任务执行完成以后, 在从文件里面恢复低优先级任务执行,继续执行。
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4100 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 01:00 · PVG 09:00 · LAX 18:00 · JFK 21:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.