很多时候需要周期性的执行某些操作,就需要用到定时器。定时器有三种思路。
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。关键词:
很多时候需要周期性的执行某些操作,就需要用到定时器。定时器有三种思路。Sleep使用休眠,让当前Goroutine休眠一定的时间来实现定时的效果,2022-12-29
【来源:临颍县气象局】临颍县气象台2022年12月28日17时44分发布大雾黄色预警信号:预计未来12小时,城关街道、繁城镇、杜曲镇、王岗镇、台陈2022-12-28
1、客体要件。本罪侵犯的客体是国家的兵役制度。2、客观要件。本罪在客观方面表现为行为人违反兵役法规,实施了逃离部队,情节严重的行为。3、2022-12-28
高盛发布研究报告称,维持京信通信(02342)”沽售“评级,中国三大电信公司5G的资本支出放缓,对明年需求及5G支出持保守态度,目标价由1 51港2022-12-28
截至2022年12月27日收盘,星球石墨(688633)报收于46 46元,下跌1 11%,换手率1 81%,成交量4157 53手,成交额1925 27万元。2022-12-28
八四消毒液有消毒的作用也可以使有色的衣服褪色褪成白色,可以泡袜子鞋垫,但应该用清水反复的冲洗,不要浓度太高了、就泡化了平时勤洗就可以2022-12-27
四川经济网眉山讯(罗俊涵记者常艰)“倪医生,我这两天有点咳嗽、嗓子疼,没有发烧,麻烦帮我诊断下。”“好的,根据你的症状,我给你开点药2022-12-27
继佛山之后,又一万亿GDP城市全面取消限购!12月26日,广东东莞住建2022-12-27
1、车辆行驶证原件或复印件;2、车辆驾驶人驾驶证原件;3、车辆驾驶人身份证原件;4、现金和银行卡。交通事故责任认定方法:1、当事人有违章行为2022-12-27
新华时评饭馆的霓虹灯重新点亮夜色、电影院等线下场所陆续开放、企业复工复产有序推进、跨境招商团队重新开始忙碌……岁末之际,随着各地因时2022-12-26
华塑控股(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型反转,短期还有低点黄金周四黄金高位震荡震荡,晚间的路演给到1814的短多获利5美金,按照以往的惯例提至保护,美盘时段2022-12-23
奥密克戎病毒致病力下降,但传播速度快、传染性强。不少人反映自己“阳”了以后,出现了浑身疼痛的情况。这是什么原因造成的?应该如何缓解?2022-12-22
莎普爱思:莎普爱思持股5%以上股东集中竞价减持股份进展公告2022-12-22
据新华社报导,中国常驻联合国代表张军20日在安理会阿富汗问题公开会上发言,呼吁国际社会加大对阿富汗的支助。 张军说,阿富汗正处在百废2022-12-22
格隆汇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