实时

您的位置:首页>企业 >

新动态:Go定时器的三种实现方式

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

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。

关键词: 内部逻辑 定时任务

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

2022-12-29 20:16:51

IAT汽车微信公众号发布声明表示,12月29日,广州车展搭建期间,阿尔特(行情300825,诊股)汽车展台工作区域意外起火,原因不明。目前,明火已经

2022-12-29 18:13:31

中国式现代化河北场景·纵深行|鹿泉乡村治理“试”出新意

2022-12-29 16:28:24

帝尔激光12月28日在投资者互动平台表示,公司的激光转印设备已经在几家公司交付单线或整线量产验证设备,三季度末实现了单机订单。在TOPCon电

2022-12-29 14:01:54

星空华文将于明日(12月29日)挂牌上市,今日于辉立暗盘交易场中收报36 4港元,较招股价高37 36%。以收盘价计,不计手续费,每手400股,账面盈利

2022-12-29 12:19:30

点蓝色字关注“机器学习算法工程师”设为星标,干货直达!​PyTorch2 0引入了**torch compile()**来加速模型,这篇文章我们将介绍如何使用

2022-12-29 10:29:47

前不久,一群来自云南省那能乡的困难学校的孩子们给一名网名为“深浮”的女孩寄去了数十张儿童画,画的主题是“谢谢你们!”“收到画的那一刻,

2022-12-28 18:01:16

10年期国债期货主力合约小幅上涨,收盘涨0 09%

2022-12-28 15:29:09

天然气是美国主要的供暖和发电燃料,由于油井冻结和管道故障,天然气供应量创下了十多年来的最大跌幅,导致价格暴涨

2022-12-28 11:27:25

光伏、半导体领域高景气,光伏设备企业高测股份(688556 SH)赚了盆满钵满。  12月26日晚间,高测股份发布2022年年度业绩预增公告,公司预计全

2022-12-28 07:41:37

航天工程:航天工程公司第四届董事会第十次会议决议公告

2022-12-27 20:14:35

台湾地区领导人蔡英文27日宣布,将台湾地区的义务兵役延长至1年。该规定2024年施行,2005年1月1日之后出生的台湾青年将受影响。目前,台湾地区

2022-12-27 16:03:27

当地时间12月26日,美国白宫发表声明宣布,美国总统拜登批准纽约州进入紧急状态,并下令联邦政府对该州抗击暴风雪灾情提供援助,国土安全部、

2022-12-27 11:31:45

本外币合一账户助企业高效理财

2022-12-27 06:05:14

八亿时空公告,拟使用额度不超过人民币4 7亿元的部分暂时闲置募集资金进行现金管理。截至2022年12月26日收盘,八亿时空(688181)报收于37 22元

2022-12-26 17:44:41

近日,北京企业联合会、北京市企业家协会在京召开2022年度北京企业100强工作新闻发布会,会上发布北京企业100强名单及《北京企业100强发展报告

2022-12-26 12:48:09

华夏恒生互联网科技业ETF(QDII)净值下跌1 71%请保持关注

2022-12-26 06:56:56

大数据文摘出品作者:Caleb12月19日,卡塔尔世界杯落幕,总决赛可以说是让观众一直紧绷神经。梅西带领的阿根廷队与卫冕冠军法国队战成三比三平

2022-12-25 14:22:14

本文编辑剧透社:彤心晓筑曾被称为“星梦一姐”的菊梓乔一直是TVB比较看重的女星,凭借一副好嗓音,菊梓乔在各大颁奖礼上也是拿奖拿到手软,前

2022-12-24 15:36:24

北京市环球律师事务所上海分所      关于 浙江永和制冷股份有限公司    法律意见书         北京市环球律师事务所上海分

2022-12-23 22:18:55