基本介绍
gtimer 是一个并发安全的高性能定时器,类似于 Java 的 Timer。 gtimer 底层采用了优先级队列( PriorityQueue)实现。
使用场景:
任何定时任务场景,大批量定时任务/延迟任务的场景,超时控制/频率控制的业务场景,对于定时时间准确度要求不高的业务场景。
注意事项:
- 任何的定时任务都是有误差的,在定时间隔比较大,或者并发量大,负载较高的系统中尤其明显,具体请参考: https://github.com/golang/go/issues/14410
- 定时间隔不会考虑任务的执行时间。例如,如果一项工作需要
3分钟才能执行完成,并且计划每隔5分钟运行一次,那么每次任务之间只有2分钟的空闲时间。 - 需要注意的是 单例模式 运行的定时任务,任务的执行时间会影响该任务下一次执行的 开始时间。例如:一个每间隔
1秒执行的任务,运行耗时为1秒,那么在 第1秒 开始运行后,下一次任务将会在 第3秒 开始执行。因为中间有一次运行检查时发现有当前任务正在进行,因此退出等待下一次执行检查。
使用方式:
import "github.com/gogf/gf/v2/os/gtimer"
接口文档:
https://pkg.go.dev/github.com/gogf/gf/v2/os/gtimer
简要说明:
New方法用于创建自定义的任务定时器对象,并可在创建时TimerOptions传入参数,其中:Interval指定定时器的最小tick时间间隔Quick指定定时器是否启动时就执行一次(默认为false)
Add方法用于添加定时任务,其中:interval参数用于指定方法的执行的时间间隔。job参数为需要执行的任务方法。
AddEntry方法添加定时任务,支持更多参数的控制。AddSingleton方法用于添加 单例 定时任务,即同时只能有一个该任务正在运行。AddOnce方法用于添加只运行一次的定时任务,当运行一次数后该定时任务自动销毁。AddTimes方法用于添加运行指定次数的定时任务,当运行times次数后该定时任务自动销毁。Search方法用于根据名称进行定时任务搜索(返回定时任务*Entry对象指针)。Start方法用于启动定时器(使用New创建定时器时会自动启动)。Stop方法用于停止定时器。Close方法用于关闭定时器。
默认定时器
大部分的场景下使用默认的定时器即可。使用 gtimer 的默认定时器时,默认的间隔时间为 100ms,因此理论的时间间隔误差范围为 0~100ms。可以使用以下两种方式修改默认的定时器参数:
- 使用启动参数
gf.gtimer.interval=50: 修改默认的时间刻度为50毫秒
- 使用环境变量
GF_GTIMER_INTERVAL=50
与 gcron 区别
具体请查看章节 定时任务-gcron与gtimer