Go定时器的三种实现方式-全球微速讯
2022-12-26 22:33:45来源:
很多时候需要周期性的执行某些操作,就需要用到定时器。定时器有三种思路。
Sleep使用休眠,让当前Goroutine休眠一定的时间来实现定时的效果,缺点是程序执行速度不均匀,导致定时周期不均匀。
(资料图片)
for{fmt.Println(time.Now())time.Sleep(time.Second*1)}TimerGo语言的内置包,指定一个时间开始计时,时间到之后会向外发送通知,发送通知的方式就是使用<-chan Time返回内容。
第一种方式,直接在需要等待处使用,效果和Sleep一样,一使用就卡在那了内部就是使用了Timer。
fmt.Println(time.Now())<-time.After(1*time.Second)fmt.Println(time.Now())
也可以把他拆分开,在任意地方进行等待
timer:=time.NewTimer(1*time.Second)<-timer.Cfmt.Println(time.Now())
但是以上只是做到延迟一次性执行,我们来改造一下,把他变成定时器。
done:=make(chanstruct{})timer:=time.NewTimer(1*time.Second)gofunc(){for{select{case<-timer.C:fmt.Println(time.Now())timer.Reset(1*time.Second)case<-done:return}}}()<-time.After(5*time.Second+time.Millisecond*100)done<-struct{}{}定义子Goroutine的目的是为了防止形成死锁,让定时器最终能退出,在实际项目中可能需要一个永久运行的定时器,一般为了不影响项目主逻辑也会这样定义。如果你的项目就是定时任务,我建议也这么写,这样可以注册很多个定时器互不影响。done是为了判断执行是否结束,防止主Goroutine提前退出。这个示例只有两个case,实战中如果有加其他case需要给每个case内都做一次Reset,保证重置定时器。Ticker相比上述使用延迟执行功能实现的定时器,Ticker本身就是一个定时器(内部封装了Timer),我们使用起来就非常简单。
ticker:=time.NewTicker(1*time.Second)gofunc(){for{<-ticker.Cfmt.Println(time.Now())}}()<-time.After(5*time.Second+time.Millisecond*100)ticker.Stop()在select 一节中讲述的官方超时控制方案非常的实用,也是使用的此函数。还使用到timer.Stop和timer.Reset这两个内置函数这里就不展开讲解了,建议进行复习。
小结定时器一般用来周期性执行任务,比如定时同步数据、计算报表、发送通知。
time.Sleep使用休眠,让当前goroutine休眠一定的时间来实现定时的效果,缺点是内部逻辑执行的速度会影响到定时器的时间差,无法做到精确间隔。Timer类似于Sleep的延迟处理,通过channel来获得通知,也可以改造成定时器。因为是延迟处理,所以要记得重置时间来实现定时执行的效果。Ticker现成的定时器,内部也是封装了 Timer。相关新闻
- 俄媒:扎哈罗娃称,希望尽快恢复与中国的人员流动和客运交通工作 速读
- 黔源电力董秘回复:根据深交所有关规定,上市公司预计年度经营业绩和财务状况出现规定情形之一的
- 全球聚焦:*ST深南连收3个涨停板
- 每日热闻!我国布洛芬、对乙酰氨基酚 日产能达2.02亿片
- 巨一科技: 巨一科技独立董事关于第一届董事会第二十二次会议相关事项的独立意见
- 世界快看点丨市北高新(600604.SH)及控股子公司累计获得政府补助3103.29万元
- 每日时讯!12月29日风语筑跌5.02%,国泰聚信价值优势混合A基金重仓该股
- 环球报道:ppmoney借款逾期42年多久会上征信
- 环球看点!汉宇集团(300403)12月28日主力资金净卖出2670.70万元
- 奶产业集群发展跑出“加速度”
- 罗普特(688619):罗普特科技集团股份有限公司自愿披露项目中标 天天即时看
- 温州银行原行长吴华一审被判死缓、终身监禁!受贿超2.75亿元 短讯
- 中国城市养老服务需求报告2022:养老规划年轻化趋势明显
- 全球新动态:阿坝理县交通违章处理时间有哪些
- 每日简讯:2023年宁波交通银行贺岁纪念币多久开始兑换
- 今热点:黄景瑜新剧《青春创世纪》将袭,牵手吴谨言,创业恋曲期待已久!
- 环球关注:券商观点|农林牧渔行业周报:猪价普遍跌破成本线 关注种业利好政策催化
- Go定时器的三种实现方式-全球微速讯
- 【环球聚看点】天原股份最新公告:子公司受限电影响减产
- 全球头条:数字经济为全球经济复苏提供重要支撑