首页>动态>正文
全球热点评!Go定时器的三种实现方式
2022-12-29 10:27:29    来源:

很多时候需要周期性的执行某些操作,就需要用到定时器。定时器有三种思路。

Sleep

使用休眠,让当前Goroutine休眠一定的时间来实现定时的效果,缺点是程序执行速度不均匀,导致定时周期不均匀。

for{fmt.Println(time.Now())time.Sleep(time.Second*1)}


(相关资料图)

Timer

Go语言的内置包,指定一个时间开始计时,时间到之后会向外发送通知,发送通知的方式就是使用<-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。

关键词:

全球热点评!Go定时器的三种实现方式

很多时候需要周期性的执行某些操作,就需要用到定时器。定时器有三种思路。Sleep使用休眠,让当前Goroutine休眠一定的时间来实现定时的效果,2022-12-29

临颍县气象局发布大雾黄色预警「III级/较重」「2022-12-28」:天天最新

【来源:临颍县气象局】临颍县气象台2022年12月28日17时44分发布大雾黄色预警信号:预计未来12小时,城关街道、繁城镇、杜曲镇、王岗镇、台陈2022-12-28

全球今头条!构成逃离部队罪的要件有哪些

1、客体要件。本罪侵犯的客体是国家的兵役制度。2、客观要件。本罪在客观方面表现为行为人违反兵役法规,实施了逃离部队,情节严重的行为。3、2022-12-28

高盛:维持京信通信沽售评级 目标价1.29港元

高盛发布研究报告称,维持京信通信(02342)”沽售“评级,中国三大电信公司5G的资本支出放缓,对明年需求及5G支出持保守态度,目标价由1 51港2022-12-28

星球石墨(688633)12月27日主力资金净买入62.29万元:环球观热点

截至2022年12月27日收盘,星球石墨(688633)报收于46 46元,下跌1 11%,换手率1 81%,成交量4157 53手,成交额1925 27万元。2022-12-28

【世界新视野】84消毒液可以泡袜子鞋垫吗?

八四消毒液有消毒的作用也可以使有色的衣服褪色褪成白色,可以泡袜子鞋垫,但应该用清水反复的冲洗,不要浓度太高了、就泡化了平时勤洗就可以2022-12-27

丹棱县:抗疫物资储备充足 基层防疫有序开展

四川经济网眉山讯(罗俊涵记者常艰)“倪医生,我这两天有点咳嗽、嗓子疼,没有发烧,麻烦帮我诊断下。”“好的,根据你的症状,我给你开点药2022-12-27

【焦点热闻】万亿GDP城市出手,全面取消限购!多个热点城市购房政策大幅松绑

继佛山之后,又一万亿GDP城市全面取消限购!12月26日,广东东莞住建2022-12-27

广西百色交通违章应该怎么处理

1、车辆行驶证原件或复印件;2、车辆驾驶人驾驶证原件;3、车辆驾驶人身份证原件;4、现金和银行卡。交通事故责任认定方法:1、当事人有违章行为2022-12-27

在“烟火气”中加速释放经济活力

新华时评饭馆的霓虹灯重新点亮夜色、电影院等线下场所陆续开放、企业复工复产有序推进、跨境招商团队重新开始忙碌……岁末之际,随着各地因时2022-12-26

华塑控股董秘回复:截至2022年12月20日,公司股东数量约为3.3万-环球观焦点

华塑控股(000509)12月26日在投资者关系平台上答复了投资者关心的问题。2022-12-26

柚子能和牛奶一起吃吗?

柚子能和牛奶一起吃吗不建议柚子能和牛奶一起吃。柚子又名文旦、气柑。柚子性寒,味甘、酸,富含有大量的糖类、苷类、胡萝卜素、B族维生素、维2022-12-26

浙江发布会:预计在元旦前后进入疫情高峰期

(原标题:浙江发布会:预计在元旦前后进入疫情高峰期)证券时报网讯,12月25日下午,浙江省第一百二十四场新冠肺炎疫情防控工作新闻发布会提2022-12-25

林存最新发声:谈及防疫概念股、医药蓝筹,这些方向迎来反转契机:世界观察

红周刊本刊编辑部|齐永超王飞精彩观点与疫情有关的公司收入更多是接近一次性的,并不具备长期和持续的增长,不能过度留恋。目前来看,导致医药2022-12-24

长期投资价值看好 上海贵酒获颁“最具投资价值上市公司”

12月23日,由《证券市场周刊》主办的上市公司峰会暨“第十六届水晶球奖”颁奖典礼隆重举行。上海贵酒股份有限公司(证券代码:600696,下称“上2022-12-23

牛奶过期了用途 过期牛奶的用途-微动态

1、过期牛奶的用途有很多,如可以用来擦拭生锈的银饰和器具,将牛奶来擦拭这些东西,会发现擦试完铁锈像新的一样。过期牛奶还可以用来护肤,牛2022-12-23

图灵看市12.23-黄金V型反转,短期还有低点

图灵看市12 23-黄金V型反转,短期还有低点黄金周四黄金高位震荡震荡,晚间的路演给到1814的短多获利5美金,按照以往的惯例提至保护,美盘时段2022-12-23

“阳了”以后浑身疼痛怎么办?专家教你这样缓解-每日焦点

奥密克戎病毒致病力下降,但传播速度快、传染性强。不少人反映自己“阳”了以后,出现了浑身疼痛的情况。这是什么原因造成的?应该如何缓解?2022-12-22

莎普爱思: 莎普爱思持股5%以上股东集中竞价减持股份进展公告 环球看热讯

莎普爱思:莎普爱思持股5%以上股东集中竞价减持股份进展公告2022-12-22

中国代表呼吁国际社会加大对阿富汗的支助-最新

据新华社报导,中国常驻联合国代表张军20日在安理会阿富汗问题公开会上发言,呼吁国际社会加大对阿富汗的支助。  张军说,阿富汗正处在百废2022-12-22

荣盛发展(002146.SZ)拟定增募资不超30亿元、用于地产项目及补充流动资金_世界热门

格隆汇12月21日丨荣盛发展披露2022年度非公开发行A股股票预案,此次非公开发行股票数量不超1,304,449,155股(含),非公开发行股票数量上限未超2022-12-21

获年度品牌影响力大奖 合生创展的品牌力启示录_全球简讯

12月19日,和讯网2022财经中国年会暨和讯网第20届财经风云榜在京举办。本次年会以“大国韧性行稳致远——中国式现代化的增长蓝图”为主题。合2022-12-21

典当纠纷合同无效一般是根据哪些的啊?

肯定合同无效!但是否有续当的事实?典当管理办法规定当期只能是六个月,但允许当期到后续当。如果典当行能证明每隔六个月,都进行了续当,则32022-12-21

优信巴士贷款逾期一个月算上征信吗_全球实时

网贷逾期一般会上征信,有些借贷机构在用户逾期后一天后就会上报给征信机构,而有些借贷机构则是会在几天后上报给征信机构,因为有些借贷机构可2022-12-20

理想全面向矩阵式组织升级

​李想和沈亚楠的内部信,说了两点:1 沈亚楠逐渐淡出;2 理想从过去的从垂直职能式组织进化到全面矩阵式组织升级。马斯克说他创造的不是每一2022-12-20