

timer是高性能定时器库
- 支持一次性定时器
- 支持周期性定时器
- 支持多种数据结构后端,最小堆,5级时间轮
import ("github.com/antlabs/timer""log")funcmain() {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()}
import ("github.com/antlabs/timer""log")funcmain() {tm:=timer.NewTimer()tm.ScheduleFunc(1*time.Second,func() {log.Printf("schedule\n") })tm.Run()}
实现时间翻倍定时的例子
typecurstomTeststruct {countint}// 只要实现Next接口就行func (c*curstomTest)Next(now time.Time) (rv time.Time) {rv=now.Add(time.Duration(c.count)*time.Millisecond*10)c.count++return}funcmain() {tm:=timer.NewTimer(timer.WithMinHeap())node:=tm.CustomFunc(&curstomTest{count:1},func() {log.Printf("%v\n",time.Now()) })tm.Run()}
import ("log""time""github.com/antlabs/timer")funcmain() {tm:=timer.NewTimer()// 只会打印2 time.Secondtm.AfterFunc(2*time.Second,func() {log.Printf("2 time.Second")})// tk3 会被 tk3.Stop()函数调用取消掉tk3:=tm.AfterFunc(3*time.Second,func() {log.Printf("3 time.Second")})tk3.Stop()//取消tk3tm.Run()}
import ("github.com/antlabs/timer""log")funcmain() {tm:=timer.NewTimer(timer.WithMinHeap())// 选择最小堆,默认时间轮}
github.com/antlabs/timer 性能最高
goos: linuxgoarch: amd64pkg: benchmarkBenchmark_antlabs_Timer_AddTimer/N-1m-16 9177537 124 ns/opBenchmark_antlabs_Timer_AddTimer/N-5m-16 10152950 128 ns/opBenchmark_antlabs_Timer_AddTimer/N-10m-16 9955639 127 ns/opBenchmark_RussellLuo_Timingwheel_AddTimer/N-1m-16 5316916 222 ns/opBenchmark_RussellLuo_Timingwheel_AddTimer/N-5m-16 5848843 218 ns/opBenchmark_RussellLuo_Timingwheel_AddTimer/N-10m-16 5872621 231 ns/opBenchmark_ouqiang_Timewheel/N-1m-16 720667 1622 ns/opBenchmark_ouqiang_Timewheel/N-5m-16 807018 1573 ns/opBenchmark_ouqiang_Timewheel/N-10m-16 666183 1557 ns/opBenchmark_Stdlib_AddTimer/N-1m-16 8031864 144 ns/opBenchmark_Stdlib_AddTimer/N-5m-16 8437442 151 ns/opBenchmark_Stdlib_AddTimer/N-10m-16 8080659 167 ns/op