推荐理由
当业务要处理大量的定时任务时,如果每个任务都创建一个Golang原生的timer的话,会占用较多的cpu资源,这类场景,可以用时间轮算法优化timer的资源消耗。本次介绍一款多级时间轮库antlabs/timer(以下timer特指antlabs/timer库),处理类似场景的优化。
功能介绍
timer最小的时间粒度是10ms, antlabs/timer支持以下功能:
一次性定时,类似time.AfterFunc;
周期性执行,类似time.Ticker;
取消单个任务;
停止所有任务。
使用指南
安装
go get github.com/antlabs/timer
代码示例
下面是一个简单的例子:
package main
import (
"log"
"time"
"github.com/antlabs/timer"
)
func main() {
tm := timer.NewTimer()
// 一次性执行,2s后执行
tm.AfterFunc(2*time.Second, func() {
log.Printf("2 time.Second")
})
// tk3 会被 tk3.Stop