很多时候需要周期性的执行某些操作,就需要用到定时器。定时器有三种思路。
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休眠一定的时间来实现定时的效果,
-
【世界热闻】赞美窗户结冰经典句子精选177句
赞美窗户结冰经典句子精选121句1 枯黄的树叶随着萧萧的寒风,纷纷投身于大地母亲的怀抱。2 随着一场凌厉的寒风吹过之后,村庄立即变得清瘦了。
-
H&H国际控股(01112.HK)涨超10%,截至发稿,涨9.46%,报16.66港元,成交额1729.83万港元
H&H国际控股(01112 HK)涨超10%,截至发稿,涨9 46%,报16 66港元,成交额1729 83万港元。
-
淮北绿金通过港交所上市聆讯:净利润再度下滑,收入依赖股东 当前速讯
12月27日,港交所披露的信息显示,淮北绿金产业投资股份有限公司(下称“淮北绿金”)通过港交所上市聆讯并递交了聆讯后招股书,光大证券国际
-
郑新黄河大桥现在有没有通车
郑新黄河大桥现在有没有通车>>>>郑新大桥恢复通车最新消息截止12月28日下午17点,郑新黄河大桥南向北已经恢复通车。河南高速路况信息实时查询
-
豆粕:近强远弱仍在持续
来源:紫金天风期货研究所观点小结核心观点:震荡国内缓慢累库,2月前整体偏紧,但略有好转。巴西南部和阿根廷降雨偏差,巴西大部分地区生长较
-
世界滚动:怎么保存菜品不变质不发霉 如何保存蔬菜
1、豆角,用沸水焯一下,放阴凉处晾干、冷冻,可以保鲜一个月。豆角放久了容易干,可以先用沸水焯一下,时间不要太长,然后放在阴凉处晾干,再
-
环球热点评!北京:近期出现再感染风险较低 没有发现德尔塔等变异株
新华社北京12月27日电(记者赵琬微)记者27日从北京市疾病预防控制中心了解到,北京市流行的新冠病毒主要为奥密克戎变异株亚分支BF 7和BA 5 2
-
中科院报告:近十年来,中国山地林草植被覆盖率增加8.2% 每日观察
中国科学院今天(12月27日)发布资源环境领域系列研究报告,其中《中国山地研究与山区发展报告》指出,近十年来,山地林草植被覆盖率增加8 2%
-
重庆杨家坪街道社区卫生服务中心智飞加强针接种安排|当前信息
疫苗选择:前三针疫苗种类第四针疫苗种类智飞龙科马重组新冠病毒疫苗(CHO细胞)智飞龙科马重组新冠病毒疫苗(CHO细胞)接种时间:周一至周五1
-
大城市周边游率先复苏 出游需求仍未完全释放 世界聚看点
近日,随着首批“阳康”走出家门,大城市首先恢复了一些烟火气,北京、上海、广州等地的本地旅游市场开始抬头,出游需求正在得到释放。携程数
-
全球聚焦:南京高科(600064)12月26日主力资金净卖出136.21万元
截至2022年12月26日收盘,南京高科(600064)报收于6 64元,下跌1 34%,换手率0 52%,成交量9 0万手,成交额6001 84万元。12月2
-
村医上门开展健康评估 确保患者能够及时就医 天天热点评
央视网消息:当前,湖南长沙县在为签约村民提供日常医疗服务的同时,积极对辖区内的重点人群进行分类精准识别,开展健康评估,确保所有患者能
-
CFA一级考试侧重内容,2023年CFA一级教材有哪些变化? 即时看
CFA一级考试涉及的知识深度一般,但是内容却相当广泛,主要侧重投资工具、财务报表分析和投资分析管理基础,使学员具备基础的金融投资分析知识
-
年度“募资王”出炉!今年IPO家数及募资额双双减少 全年累计募资超5000亿元 世界热闻
2022年最后一批新股迎来申购,全年新股发行家数及募资额相比去年均有下降。
-
当前看点!ST安信: 关于与信托保障基金签署《债务和解协议之补充协议》暨关联交易的公告
安信信托股份有限公司公告证券代码:600816 股票简称:ST 安信 编号:临 2022-106
-
意大利国家电力公司签署120亿欧元信贷协议
意大利国家电力公司(Enel)12月23日宣布与五家金融机构签署了一项120亿欧元的循环信贷融资协议,为该公司和Enel国际贸易公司在能源市场上的交易
-
即时焦点:12月23日基金净值:安信价值回报三年持有混合A最新净值1.129,跌0.83%
12月23日,安信价值回报三年持有混合A最新单位净值为1 129元,累计净值为1 229元,较前一交易日下跌0 83%。历史数据显示该基金近1个月上涨6 32%
-
当前热点-中国第一个国家森林公园纪念建园四十周年
中新网张家界12月23日电 (邓霞 龚素禾)12月23日,中国第一个国家
-
高虹安新竹市府人事 35岁施淑婷任发言人
台湾民众党新竹市长当选人高虹安昨天公布第二波人事名单,其中原市府秘书长江盛任回任环保局长,行政处长由台北市长柯文哲团队的机要秘书谢泊