很多时候需要周期性的执行某些操作,就需要用到定时器。定时器有三种思路。
Sleep使用休眠,让当前Goroutine休眠一定的时间来实现定时的效果,缺点是程序执行速度不均匀,导致定时周期不均匀。
for{fmt.Println(time.Now())time.Sleep(time.Second*1)}
(资料图片仅供参考)
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使用休眠,让当前Gorout...
截至2022年12月23日收盘,口子窖报收于60 77元,上涨1 28%,换手率1 72%,成交量10 31万手,成交额6...
2022年12月24日公告发布
12月23日盘中消息,13点7分洪兴股份(001209)触及跌停板。目前价格14 95,下跌9 99%。其所属行业服装...
根据市场公开信息及12月22日披露的机构调研信息,华商基金近期对1家上市公司进行了调研,相关名单如下:...
智通财经APP讯,中达集团控股公布,自2022年12月22日起,刘宏伟已辞任独立非执行董事,并将不再担任公司...
硅片以及硅料价格近期失速下滑。其中,M10单晶硅片价格周跌幅探至20%。业内分析认为,这一方面是源于近...
最近,有一位自称是成龙新电影《龙马精神》临时演员的网友爆料,声称自己在拍戏期间坠马受伤,导致胸椎...
证券代码:002983 股票简称:芯瑞达 公告编号:2022-051 ...
三年来,巨量千川平台旗下的抖音电商生态建设得日渐成熟,吸引了众多品牌纷纷布局抖音,寻找新增长。商...
【典型派】◎本报记者 魏依晨 通讯员 周伟翔江西省抚州市科技局
福鞍股份:福鞍股份关于持股5%以上股东股份质押的公告
街坊邻里虽然只是点头之交,但有需要时他们可能就是在雨天为你撑起一把伞的人。近段时间疫情持续,一些...
每兆瓦时180欧元!欧盟天然气价格上限协议达成,气价应声回落
2022年广西投入逾7亿元促进冷链物流产业发展2022年12月17日15:42中国新闻网
同花顺数据中心显示,二三四五12月16日获融资买入1807 01万元,占当日买入金额的43 81%,当前融资余额...
为应对新冠疫情的影响,抢抓中长期贷款和设备购置与更新改造贷款财政贴息等国家金融政策机遇,推动稳增...
雄鹿续约波蒂斯&马修斯1年650万签下英格尔斯,英格尔斯,波蒂斯,马修斯,雄鹿队,nba,爵士
光华股份(001333)12月17日在投资者关系平台上答复了投资者关心的问题。
本周,美国石油基金公布了两年多来最大的单日资金流出
资讯News
06-20
11-03
11-03
11-03
11-03
11-03
11-03
11-03
11-03
11-03
11-03
聚焦Policy
当好农民工的“护薪人” 近日,罗某等7名农民工在收到被拖欠的工资后,纷纷打电话向江西省南昌市...
“通讯录里所有人都知道我欠钱了” □ 本报记者 韩丹东 □ 本报见习记者 张守坤 ...
大连宝马车撞人案肇事司机被判死刑 本报讯 记者韩宇 10月29日,辽宁省大连市中级人民法院一审...
医院财务迷上网络赌博输光5000万元公款 □ 本报记者 马维博 □ 本报通讯员 汪宇堂 曹...
辊环车削 雕琢毫厘(工匠绝活) 【绝活看点】 23年来,雷虎始终扎根一线,改进钢材轧制工艺...
交警严查超标电动自行车挪用“白牌” 截至昨晚6时,处罚电动自行车违法行为共计6585笔;下一步将...
明起寒潮来袭 北方气温普降10℃以上 中央气象台预计,本周日北京平原地区最低气温降至-4℃左右...
多种蔬菜价格降幅达五成 包括菠菜、蒿子秆等 预计本月中旬蔬菜恢复供需平衡 本报讯(记者...
北京周日最低气温或达-4℃ 本报讯(记者 赵婷婷)北京青年报记者昨天从中央气象台获悉,新一股...
昌平一家四口确诊新冠肺炎 天通北苑第二社区升级为中风险地区 朝阳两涉疫校区及16所学校停课 ...