The Go Programming Language
› http://golang.org/
› Go Playground
Go Projects
› Revel Web Framework
guonaihong

高性能定时器,基于 5 级时间轮实现。fast,fast,fast

  •  
  •   guonaihong ·
    guonaihong · Jun 16, 2020 · 4562 views
    This topic created in 2338 days ago, the information mentioned may be changed or developed.

    timer

    timer 是一个高性能定时器库。

    项目地址

    https://github.com/antlabs/timer

    example

    import (
        "github.com/antlabs/timer"
        "log"
    )
    
    func main() {
            tm := timer.NewTimer()
    
            tm.AfterFunc(1*time.Second, func() {
                    log.Printf("after\n")
            })
    
            tm.AfterFunc(10*time.Second, func() {
                    log.Printf("after\n")
            })
            tm.Run()
    }
    

    benchmark

    压测代码仓库位置

    https://github.com/antlabs/timer-benchmark

    Benchmark_antlabs_Timer_AddTimer 是本库压测数据,从结果上看,性能表现最好。 go 1.13.5

    goos: linux
    goarch: amd64
    pkg: benchmark
    Benchmark_antlabs_Timer_AddTimer/N-1m-16        	 9177537	       124 ns/op
    Benchmark_antlabs_Timer_AddTimer/N-5m-16        	10152950	       128 ns/op
    Benchmark_antlabs_Timer_AddTimer/N-10m-16       	 9955639	       127 ns/op
    Benchmark_RussellLuo_Timingwheel_AddTimer/N-1m-16         	 5316916	       222 ns/op
    Benchmark_RussellLuo_Timingwheel_AddTimer/N-5m-16         	 5848843	       218 ns/op
    Benchmark_RussellLuo_Timingwheel_AddTimer/N-10m-16        	 5872621	       231 ns/op
    Benchmark_ouqiang_Timewheel/N-1m-16                       	  720667	      1622 ns/op
    Benchmark_ouqiang_Timewheel/N-5m-16                       	  807018	      1573 ns/op
    Benchmark_ouqiang_Timewheel/N-10m-16                      	  666183	      1557 ns/op
    Benchmark_Stdlib_AddTimer/N-1m-16                         	 8031864	       144 ns/op
    Benchmark_Stdlib_AddTimer/N-5m-16                         	 8437442	       151 ns/op
    Benchmark_Stdlib_AddTimer/N-10m-16                        	 8080659	       167 ns/op
    
    
    16 replies  •  2020-06-30 10:44:20 +08:00
    songjiaxin2008
    songjiaxin2008
    Jun 16, 2020
    1
    好奇这个 5 级是怎么摸索出来的?经验值?
    wysnylc
    wysnylc
    Jun 16, 2020
    2
    @songjiaxin2008 #1 新手村做完 3 个任务即可
    Vegetable
    Vegetable
    Jun 16, 2020
    3
    想知道使用场景,有点懵逼,Golang 这样语言好像不是很适合这种场景呢
    sadfQED2
    sadfQED2
    Jun 16, 2020 via Android
    4
    @Vegetable crontab 没法支持毫秒级定时任务,用这种框架搭一个定时任务服务器
    reus
    reus
    Jun 16, 2020
    5
    1.13 比个屁,1.14 定时器有大改进
    guonaihong
    guonaihong
    OP
    Jun 16, 2020
    6
    @reus 请看看下压测项目,有 go 1.14.4
    guonaihong
    guonaihong
    OP
    Jun 16, 2020
    7
    @reus go1.14.4
    goos: linux
    goarch: amd64
    pkg: benchmark
    Benchmark_antlabs_Timer_AddTimer/N-1m-16 14327593 77.1 ns/op
    Benchmark_antlabs_Timer_AddTimer/N-5m-16 16078015 80.0 ns/op
    Benchmark_antlabs_Timer_AddTimer/N-10m-16 16101303 86.5 ns/op
    Benchmark_RussellLuo_Timingwheel_AddTimer/N-1m-16 5994146 195 ns/op
    Benchmark_RussellLuo_Timingwheel_AddTimer/N-5m-16 6636303 190 ns/op
    Benchmark_RussellLuo_Timingwheel_AddTimer/N-10m-16 6803047 198 ns/op
    Benchmark_ouqiang_Timewheel/N-1m-16 861498 1670 ns/op
    Benchmark_ouqiang_Timewheel/N-5m-16 685520 1724 ns/op
    Benchmark_ouqiang_Timewheel/N-10m-16 695408 1685 ns/op
    Benchmark_Stdlib_AddTimer/N-1m-16 6622006 185 ns/op
    Benchmark_Stdlib_AddTimer/N-5m-16 7021538 187 ns/op
    Benchmark_Stdlib_AddTimer/N-10m-16 7219875 170 ns/op
    PASS
    ok benchmark 104.387s
    vus520
    vus520
    Jun 17, 2020
    8
    @guonaihong 大神撸了好多包,也用了几个了。比较感兴趣的还是 curl,哈哈
    guonaihong
    guonaihong
    OP
    Jun 17, 2020
    9
    @vus520 哦,哈哈。curl 库又加了很多选项支持。
    guonaihong
    guonaihong
    OP
    Jun 17, 2020
    10
    @songjiaxin2008 5 级是对现实世界,ms, s, m, h, d 的近似值,比如一分钟等于 60s(60 刻度),为了方便方便位移操作选了 64(2 的 8 次方)的刻度。
    ifconfig
    ifconfig
    Jun 17, 2020
    11
    正好目前在做的项目需要一个高性能定时器,支持一下楼主👍
    guonaihong
    guonaihong
    OP
    Jun 18, 2020
    12
    @ifconfig 感谢支持。。。
    tcfenix
    tcfenix
    Jun 28, 2020
    13
    楼主我记得你,上次你还发 deepcopy 库了
    guonaihong
    guonaihong
    OP
    Jun 29, 2020
    14
    @tcfenix 哈哈,利害厉害,你记性好。
    tcfenix
    tcfenix
    Jun 29, 2020
    15
    @guonaihong
    现在 deepcopy 我还是用 coven,时间的话我开始改用你的库了
    guonaihong
    guonaihong
    OP
    Jun 30, 2020
    16
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2215 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 14:19 · PVG 22:19 · LAX 06:19 · JFK 09:19
    ♥ Do have faith in what you're doing.