Golang Go语言 高性能定时器,基于 5 级时间轮实现。fast,fast,fast
Golang Go语言 高性能定时器,基于 5 级时间轮实现。fast,fast,fast
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
更多关于Golang Go语言 高性能定时器,基于 5 级时间轮实现。fast,fast,fast的实战教程也可以访问 https://www.itying.com/category-94-b0.html
#1 新手村做完 3 个任务即可
想知道使用场景,有点懵逼,Golang 这样语言好像不是很适合这种场景呢
crontab 没法支持毫秒级定时任务,用这种框架搭一个定时任务服务器
1.13 比个屁,1.14 定时器有大改进
请看看下压测项目,有 go 1.14.4
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
大神撸了好多包,也用了几个了。比较感兴趣的还是 curl,哈哈
哦,哈哈。curl 库又加了很多选项支持。
5 级是对现实世界,ms, s, m, h, d 的近似值,比如一分钟等于 60s(60 刻度),为了方便方便位移操作选了 64(2 的 8 次方)的刻度。
正好目前在做的项目需要一个高性能定时器,支持一下楼主👍
感谢支持。。。
楼主我记得你,上次你还发 deepcopy 库了
哈哈,利害厉害,你记性好。
现在 deepcopy 我还是用 coven,时间的话我开始改用你的库了
ok
在Go语言中实现高性能定时器,采用5级时间轮是一种非常有效的方法。时间轮算法通过将时间划分为多个槽位(bucket),每个槽位可以存放定时任务,从而实现对大量定时任务的高效管理。5级时间轮则进一步提升了这种效率,通过分层级管理不同粒度的定时器,减少了冲突和重定位的频率。
以下是5级时间轮实现高性能定时器的几个关键点:
-
层级设计:5级时间轮意味着有5个不同粒度的时间层级,从秒、分钟到小时、天甚至更长的时间跨度。每一级都管理着对应粒度的定时任务。
-
动态调整:时间轮算法支持动态添加和删除定时任务,这在高并发环境下尤为重要。通过合理的槽位分配和回收策略,可以确保定时任务的及时执行和资源的高效利用。
-
减少冲突:5级时间轮的层级设计有效减少了定时任务在同一时间点的冲突,使得每个任务都能被准确地调度和执行。
-
内存优化:通过时间轮的循环使用和槽位的复用,避免了大量内存分配和回收的开销,进一步提升了性能。
综上所述,基于5级时间轮实现的Go语言高性能定时器,能够在保证高效执行的同时,支持大量定时任务的动态管理。这种设计不仅提升了系统的响应速度和稳定性,还降低了资源消耗,是构建高性能分布式系统的重要基石。在追求“fast, fast, fast”的IT环境中,这种定时器实现方案无疑具有极大的优势和吸引力。