Go定时器的三种实现方式
很多时候需要周期性的执行某些操作,就需要用到定时器。定时器有三种思路。Sleep使用休眠,让当前Goroutine休眠一定的时间来实现定时的效果,
很多时候需要周期性的执行某些操作,就需要用到定时器。定时器有三种思路。
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休眠一定的时间来实现定时的效果,
2023元旦广州永庆坊新年音乐会时间表时间:2022年12月30日、2023年1月1日-1月2日地点:广州永庆坊金声广场门票:预约免费参与演出日程表:12月30
2023周口中小学寒假最新消息2023周口中小学寒假放假时间及开学时间已于12月27日公布,以下为相关信息可做参考,郑州本地宝为您带来相关信息:1
截至2022年12月27日收盘,龙元建设(600491)报收于6 07元,上涨6 3%,换手率1 46%,成交量22 34万手,成交额1 33亿元。12月27日
据韩联社报道,当地时间27日下午1时许,韩军在仁川市江华郡发现“推测是朝鲜无人机的航迹”,并出动了与26日朝鲜无人机“侵犯韩国领空”时同级
中新网武汉12月27日电(梁婷袁青竹)记者27日从湖北省文化和旅游厅获悉,由湖北省文物事业发展中心作为牵头单位承担的《湖北省长江文物资源调
公募年内600亿投向定增:有产品浮盈超40%这些基金踩雷热门股
不收取手续费;缴纳的罚款需要根据违法行为的不同而不同,在50-2000元以内。机动车违章查询方式:1、到各市各区县交通支大队的办公大厅通过触
2022年12月27日公告发布
新华社北京12月24日电题:更好统筹供给侧结构性改革和扩大内需——学习领会“六个更好统筹”之三新华社记者王雨萧刚刚结束的中央经济工作会议
近期,食品添加剂成为网络关注的话题。很多人现在才知道,用花生酱、食用油以及少许的芝麻味香精就能做出芝麻酱味调料,用面筋粉、磷酸盐再加
用户的损失会承担责任,哪怕公司赔破产了,也不会妥协
最近嗓子有些不舒服所以想煮点梨子来润润喉的,但是不知道这个梨子在煮的时候是削皮好还是不削皮好?梨子煮完水之后还用不用吃里面的梨肉呢?
自从2021年开始,健康技术公司AliveCor就一直在与苹果微软AppleWatch的心电图(ECG)相关专利打专利战,现在,这一旷日持久的官司终于落下帷幕
截至2022年12月23日收盘,太原重工(600169)报收于2 35元,较上周的2 46元下跌4 47%。本周,太原重工12月19日盘中最高价报2 46元。1
奥密克戎病毒致病力下降,但传播速度快、传染性强。儿童在疫情期间出现发热等症状,应该特别注意哪些要点呢?新华社记者采访了中南大学湘雅医
多瑞医药(301075)12月22日公开信息显示,股东西藏嘉康时代科技发展有限公司向深圳市中小担小额贷款有限公司合计质押410 0万股,占总股本5 12
中国电信深耕工业互联网领域为产业数字化注入创新基因,日前,根据《工业和信息化部办公厅关于开展2022年工业互联网平台创新领航应用案例征集活
共计支持园区围绕特色产业发展的共性需求,建设共享实验室、测试服务平台、检验检测平台、中试生产线等各类产业服务设施12处。公共服务设施建
证券代码:603713 证券简称:密尔克卫 公告编号:2022-182转债代码:113658 转债简称:密卫转债 密
中关村在线消息:12月21日,经常发表苹果产品曝光的天风证券分析师郭明錤再次在社交平台上放出了他的最新分析前瞻:他表示苹果可能将取消 延后
网贷逾期一般会上征信,有些借贷机构在用户逾期后一天后就会上报给征信机构,而有些借贷机构则是会在几天后上报给征信机构,因为有些借贷机构可
94岁李嘉诚回来了?携千亿资产改回国籍,国内捐款已超300亿
市场监管总局将严查三类涉疫药品、医疗用品违法广告
平凡的世界:田晓霞与孙少平的爱情,有着怎样的变化轨迹?《平凡的世界》里田晓霞与孙少平的爱情,由于田晓霞的牺牲戛然而止,这总是让人心有
Copyright 2015-2022 亚洲酒业网 版权所有 备案号:豫ICP备20022870号-9 联系邮箱:553 138 779@qq.com