You are viewing an old version of this page. View the current version.
Compare with Current View Page History
« Previous Version 17 Next »
gtimer是一个并发安全的高性能任务定时器,类似于Java的Timer。
gtimer
Java
Timer
gtimer组件旧版本采用的是分层时间轮(Hierarchical Timing Wheel)设计,从goframe v1.16版本开始,采用了优先级队列(PriorityQueue)实现。
Hierarchical Timing Wheel
goframe v1.16
PriorityQueue
使用场景:
任何定时任务场景,大批量定时任务/延迟任务的场景,超时控制/频率控制的业务场景,对于定时时间准确度要求不高的业务场景。
注意事项:
使用方式:
import "github.com/gogf/gf/os/gtimer"
接口文档:
https://godoc.org/github.com/gogf/gf/os/gtimer
简要说明:
New
interval
TimerOptions
tick
Add
job
AddEntry
AddSingleton
AddOnce
AddTimes
times
Search
*Entry
Start
Stop
Close
大部分的场景下使用默认的定时器即可。如果确实有创建自定义时间轮对象的必要,务必提前理解时间轮设计概念,并且防止设计的时间刻度大小溢出。
使用gtimer的默认定时器时,默认的间隔时间为100ms,因此理论的时间间隔误差范围为0~100ms。可以使用以下两种方式修改默认的定时器参数:
100ms
0~100ms
gf.gtimer.interval=50
50毫秒
GF_GTIMER_INTERVAL=50
goos: linux goarch: amd64 pkg: github.com/gogf/gf/os/gtimer Benchmark_Add-4 3000000 484 ns/op 152 B/op 5 allocs/op Benchmark_StartStop-4 100000000 10.1 ns/op 0 B/op 0 allocs/op PASS ok command-line-arguments 6.602s
示例1, 间隔任务
package main import ( "fmt" "github.com/gogf/gf/os/gtimer" "time" ) func main() { now := time.Now() interval := 1400*time.Millisecond gtimer.Add(interval, func() { fmt.Println(time.Now(), time.Duration(time.Now().UnixNano() - now.UnixNano())) now = time.Now() }) select { } }
执行后,输出结果为:
2019-01-17 18:17:37.022442 +0800 CST m=+1.354132542 1.353568s 2019-01-17 18:17:38.422467 +0800 CST m=+2.754148119 1.399624s 2019-01-17 18:17:39.82318 +0800 CST m=+4.154851847 1.40066s 2019-01-17 18:17:41.222422 +0800 CST m=+5.554084408 1.399094s 2019-01-17 18:17:42.622461 +0800 CST m=+6.954112968 1.399962s 2019-01-17 18:17:44.022769 +0800 CST m=+8.354411089 1.400251s ...
示例2, 单例任务
package main import ( "github.com/gogf/gf/os/glog" "github.com/gogf/gf/os/gtimer" "time" ) func main() { interval := time.Second gtimer.AddSingleton(interval, func() { glog.Println("doing") time.Sleep(5*time.Second) }) select { } }
2019-01-23 17:04:18.892 doing 2019-01-23 17:04:24.890 doing 2019-01-23 17:04:29.892 doing 2019-01-23 17:04:35.891 doing ...
gcron
gtimer任务定时器与gcron定时任务模块区别:
纳秒
crontab
秒