timer 是一个高性能定时器库。
https://github.com/antlabs/timer
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()
}
压测代码仓库位置
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
1
songjiaxin2008 2020-06-16 10:36:19 +08:00
好奇这个 5 级是怎么摸索出来的?经验值?
|
2
wysnylc 2020-06-16 11:35:13 +08:00
@songjiaxin2008 #1 新手村做完 3 个任务即可
|
3
Vegetable 2020-06-16 11:38:29 +08:00
想知道使用场景,有点懵逼,Golang 这样语言好像不是很适合这种场景呢
|
5
reus 2020-06-16 13:49:57 +08:00
1.13 比个屁,1.14 定时器有大改进
|
6
guonaihong OP @reus 请看看下压测项目,有 go 1.14.4
|
7
guonaihong OP @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 |
8
vus520 2020-06-17 09:53:53 +08:00
@guonaihong 大神撸了好多包,也用了几个了。比较感兴趣的还是 curl,哈哈
|
9
guonaihong OP @vus520 哦,哈哈。curl 库又加了很多选项支持。
|
10
guonaihong OP @songjiaxin2008 5 级是对现实世界,ms, s, m, h, d 的近似值,比如一分钟等于 60s(60 刻度),为了方便方便位移操作选了 64(2 的 8 次方)的刻度。
|
11
ifconfig 2020-06-17 23:55:54 +08:00
正好目前在做的项目需要一个高性能定时器,支持一下楼主👍
|
12
guonaihong OP @ifconfig 感谢支持。。。
|
13
tcfenix 2020-06-28 15:29:01 +08:00
楼主我记得你,上次你还发 deepcopy 库了
|
14
guonaihong OP @tcfenix 哈哈,利害厉害,你记性好。
|
15
tcfenix 2020-06-29 11:10:16 +08:00
@guonaihong
现在 deepcopy 我还是用 coven,时间的话我开始改用你的库了 |
16
guonaihong OP @tcfenix ok
|