很多时候需要周期性的执行某些操作,就需要用到定时器。定时器有三种思路。
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。标签:
精彩推荐
同花顺数据中心显示,上海莱士12月16日获融资买入3858 01万元,占当日买入金额的13 16%,当前融资余额...
龙海:G228线白坑交通量观测站正式开工建设
1、这要分情况,有些可以机洗,有些不可以,比如说像冬天的棉被、蚕丝被及羊毛被等比较厚的就不可以机洗...
明日废钢预测:今日国内废钢市场将稳定。今天国内废钢回收价格是多少?个别钢厂采购价格有所调整。钢铁焦...
证券代码:002411 证券简称:*ST 必康 公告编号:2022-157 ...
格隆汇12月16日丨第七届“格隆汇·全球投资嘉年华·2023”于12月15日一22日在线上盛大举行。在今天的格...
根据市场公开信息及12月15日披露的机构调研信息,鑫元基金近期对1家上市公司进行了调研,相关名单如下:...
如果有一天,你骑车走在街上,突然有人将你拦下,莫名指责你的车碰到了他,怎么办?近日,濮阳市公安局...
“退钱”,华泰柏瑞昔日爆款基金跌50%,副总经理李晓西遭吐槽
同花顺数据中心显示,芯碁微装12月14日获融资买入886 09万元,占当日买入金额的15 03%,当前融资余额7...
智通财经APP讯,辽宁能源(600758 SH)公告,截至2022年12月14日,公司股东辽宁交通投资有限责任公司(“...
日前,人社部、国家发改委等八部门印发《关于实施重点群体创业推进行动的通知》(下称《通知》)。《通知...
12月13日,银华价值优选混合最新单位净值为2 2823元,累计净值为7 5977元,较前一交易日下跌1 03%。...
截至2022年12月13日收盘,天目湖(603136)报收于28 92元,上涨1 97%,换手率2 7%,成交量5 03万手,成交额1 46亿元。
恒源煤电(600971)12月13日在投资者关系平台上答复了投资者关心的问题。投资者:请问,截至2022年十二月9...
克明食品12月10日发布投资者关系活动记录表,公司于2022年12月8日接受5家机构单位调研,机构类型为基金...
1、种植的时,鸡枞菌适合种植的时间是在每年的九月份到十月份这段时间内,这段时间内的温度和气候都是比...
证券代码:603690 证券简称:至纯科技 公告编号:2022-144 ...
香港交易及結算所有限公司及香港聯合交易所有限公司對本公告之內容概不負責,對其準確性或完整性亦不發...
10月30日,镇平县枣园镇党委书记刘柯兵到枣园镇招商引资项目镇平县振星铜业有限公司检查指导工作,与企...
仁和药业(000650)12月06日在投资者关系平台上答复了投资者关心的问题。投资者:请问市场上销售的 "仁和...
近日,山东省高级人民法院向社会通报全省法院消费者权益司法保护工作情况及10起典型案例。据了解,五年...
南京市19日通报,公安部门在疫情防控期间依法打击各类涉疫违法犯罪行为,截至3月18日,全市共查处各类涉...
日前,北京市人民政府新闻办公室举行新闻发布会,解读《北京市全民科学素质行动规划纲要(2021—2035年)...
资讯News
08-09
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所学校停课 ...