Go定时器的三种实现方式_当前简讯
很多时候需要周期性的执行某些操作,就需要用到定时器。定时器有三种思路。
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。标签:
为您推荐
广告
随机阅读
- Go定时器的三种实现方式_当前简讯
- 世界速讯:使用PyTorch 2.0 加速Hugging Face和TIMM库的模型
- 20余场“京彩”演出迎新
- 盐湖股份董秘回复:公司后续将根据市场情况继续实施回购计划,同时依据相关法律、法规和规范性文件的要求
- 环球视点!卡塞米罗加盟曼联后共计登场20场 胜率高达75%
- 宋仲基新女友身份被扒,曾是英国情色片演员,颜值不输宋慧乔_最新
- 世界短讯!除了菠菜还有什么菜可以做绿色菜汁?
- UBports发布基于Ubuntu 20.04 的 Ubuntu Touch Beta / RC 版
- 苹果中国开启新年福利:iPhone 13等降价优惠千元! 当前热点
- 智通港股52周新高、新低统计|12月26日|全球新要闻
- 凭TX车型电动化转型获认可,LEVC将持续深化零碳出行领域! 天天讯息
- 环球视点!科威特向欧洲运送首批6.6万吨柴油
- 新鲜甜笋煮鸡怎么做最好吃 甜笋煮鸡的家常做法_当前信息
- 极市直播预告丨NeurIPS 2022 Oral-张博航:如何从模型层面获得对抗鲁棒性保证? 世界播资讯
- 天天热消息:美股异动 | AMC院线(AMC.US)跌超6.5% 昨日一度跌近30%
- 江苏银行: 江苏银行监事会决议公告
- 世贸组织:全球服务贸易2023年初将继续走弱
- 珠海打造创新生态场助力澳门创业项目孵化
- 速递!相城检测(873481):拟修订公司章程公告
- 天天实时:内房股全线走高 融信中国(03301)大涨28%
- 1每日聚焦:荣盛发展: 第七届董事会第二十一次会议决议公告
- 2世界今亮点!沈阳华润热电有限公司异地扩建2×350MW热电联产项目15项中标公示
- 3乐歌股份:目前公司海外仓利用率在80%以上
- 4世界焦点!中交天和成功打通盾构机全国产化“最后一公里”
- 5全球播报:佰维存储(688525)新股概览,12月21日开始网上申购
- 6ZOL科技早餐:骁龙8 Gen2新机2999元,魅族19外观将揭晓 最资讯
- 7cpa和frm双证的年薪高吗?含金量如何?
- 8世界微资讯!电光科技:公司目前没有和五矿发展公司有合作
- 9汇添富纳斯达克生物科技ETF(QDII)净值下跌2.07% 请保持关注
- 10全网首晒,老鸭集酱鸭-全球速看
广告
财经
- 环球速讯:不丹王室全家福真奇怪,国王不见人影,个人照眼眶深陷满脸老态
- 小皮婴幼儿四维科学喂养方案获权威专家认可 助力中国父母消除育儿焦虑
- 12月12日基金净值:建信双债增强债券A最新净值1.284_环球看点
- 醉驾有点重新犯罪后还能再次被判刑吗
- 数字技术让南京历史文化遗产“活”起来
- 中航电子: 中航电子第七届监事会2022年度第十次会议决议公告 世界视点
- 天天快看:成都市新冠就医咨询线上服务开通
- 康冠科技:公司新增募投项目建成投产、旧产线改造完成后,整体产能预计较2021年增长20%—30%左右
- 嘉华股份:除本公司外,目前我国A股市场上还未有主营业务是以非转基因大豆为原材料,生产及销售大豆蛋白的其他公司实现上市
- 四川什邡一场灯光晚会 带领广大游客“云游”蓥华镇
- 永定河启动最大流量脉冲试验 最大补水流量达500立方米/秒
- 天津市出台保障性租赁住房新政 承租人申领居住证后可享积分落户政策
- 中核向晶科能源采购光伏设备以开发云南80MW光伏电站
- 晶澳、一道和锦州阳光拟中标中广核新能源2022年第一批组件集采01标段
- 对户用光伏设计提出要求 山东省出台《低压分布式光伏计量采集典型设计方案》
- 南方能监局:加强南方区域新型储能发展应用监管工作
- 工信部:打造绿色低碳产品供给体系,实施智能光伏产业创新发展专项行动
- 国家统计局:2021年末并网太阳能发电装机30656万千瓦 增长20.9%
- 德国将100%实现可再生能源发电提前至2035年
- 西班牙Q-Energy到2025年将投资90亿欧元用于可再生能源