gtimer
gtimer
是一个并发安全的高性能任务定时器,类似于Java
的Timer
。gtimer
内部实现采用灵活高效的分层时间轮(Hierarchical Timing Wheel
)设计,被设计为可单进程管理维护百万级别以上数量的定时任务。
gtimer
任务定时器与gcron
定时任务模块区别:
- gtimer
属于高性能模块,是框架核心模块,构建任何定时任务的基础,任何方法操作耗时均在纳秒
级别。
- gtimer
可适用于任何的定时任务场景中,例如: TCP通信、游戏开发等场景。
- gcron
支持经典的crontab
形式的定时任务语法,最小时间设定间隔为秒
。
- gcron
底层实现基于gtimer
。
使用场景:
任何定时任务场景,大批量定时任务/延迟任务的场景,超时控制/频率控制的业务场景,对于定时时间准确度要求不高的业务场景。
注意事项:
- 任何的定时任务都是有误差的,在时间轮刻度比较大,或者并发量大,负载较高的系统中尤其明显,具体请参考:https://github.com/golang/go/issues/14410
- 定时间隔不会考虑任务的执行时间。例如,如果一项工作需要3分钟才能执行完成,并且计划每隔5分钟运行一次,那么每次任务之间只有2分钟的空闲时间。
- 需要注意的是单例模式运行的定时任务,任务的执行时间会影响该任务下一次执行的开始时间。例如:一个每秒执行的任务,运行耗时为1秒,那么在第1秒开始运行后,下一次任务将会在第3秒开始执行。
使用方式:
import "github.com/gogf/gf/os/gtimer"
接口文档:
https://godoc.org/github.com/gogf/gf/os/gtimer
简要说明:
1. New
方法用于创建自定义的任务定时器对象:
- slot
参数用于指定每个时间轮的槽数;
- interval
参数用于指定定时器的最小tick时间间隔;
- level
为非必需参数,用于自定义分层时间轮的层数,默认为6
;
1. Add
方法用于添加定时任务,其中:
- interval
参数用于指定方法的执行的时间间隔;
- job
参数为需要执行的任务方法(方法地址);
1. AddEntry
方法添加定时任务,支持更多参数的控制;
1. AddSingleton
方法用于添加单例定时任务,即同时只能有一个该任务正在运行;
1. AddOnce
方法用于添加只运行一次的定时任务,当运行一次数后该定时任务自动销毁;
1. AddTimes
方法用于添加运行指定次数的定时任务,当运行times
次数后该定时任务自动销毁;
1. Search
方法用于根据名称进行定时任务搜索(返回定时任务*Entry
对象指针);
1. Start
方法用于启动定时器(使用New
创建定时器时会自动启动);
1. Stop
方法用于停止定时器;
1. Close
方法用于关闭定时器;