天天消息!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定时器的三种实现方式
- 中州期货:中钢并入宝武,铁矿石震荡运行_天天短讯
- 易烊千玺颜值降级?拜托!人家刚满20岁就上了“时装双刊” 今日观点
- 世界微资讯!12月21日华阳集团跌5.10%,景顺新能源A基金重仓该股
- 天天快资讯:冰山冷热(000530)12月20日主力资金净买入79.27万元
- 世名科技: 苏州世名科技股份有限公司关于控股股东、实际控制人部分质押股份延期购回的公告
- Polkadot 能否达到与 L2 解决方案相当的出块时间?| W3F 12 月 AMA
- 欧洲天然气储备面临考验 法国电力巨头推迟重启核反应堆 当前热文
- 诺亚控股-S(06686.HK)自愿转换至于香港联交所主板双重主要上市 全球视讯
- 分析师:明年亚洲股市将跑赢美股 中韩或成最大赢家 环球微速讯
- 加大宏观政策调控力度 保持经济运行在合理区间-环球关注
- 决赛首发名单出炉!阿根廷VS法国历史交手12次,阿根廷6胜3平3负|环球热头条
- 关注:61岁演员涂们因病离世,黄轩发文悼念:一个月前他的身体还很硬朗
- 热点在线丨湖北五级工伤赔偿标准
- 红腹锦鸡误入社区办公楼,湖北保康警民携手救助
- 杀人犯自首如何判?有哪些具体的判刑标准?
- 山东省济宁市市场监管局抽检八角蛋糕等糕点50批次均合格|全球快消息
- 快资讯丨城投控股(600649.SH):弘毅(上海)股权投资基金拟减持不超3%股份
- 奥迪照片图片大全大图(女性10万左右自动挡车) 世界速讯
- 公司委托个人解决民事纠纷途径是什么_全球速看
- 1晶丰明源(688368.SH)公司及董秘收到上海证监局警示函|世界通讯
- 2仅剩最后一个月!微软再次警告Win8.1即将停止支持-世界报资讯
- 3浙江仙通: 浙江仙通-第五届董事会第四次会议独立董事的独立意见-当前快看
- 4优彩资源:本次可转债的发行总额为人民币60,000.00万元-焦点快看
- 5苏博特(603916)12月12日主力资金净卖出338.56万元 天天热文
- 6当前要闻:明志科技: 独立董事候选人声明(何艳)
- 7cfa二级道德如何准备?附考试题型分析
- 8江苏新能: 江苏新能关于控股股东的一致行动人增持公司股份达到2%的提示性公告
- 9信阳市浉河区:党员服务队进企业助复产_全球资讯
- 10最新资讯:12月7日水星家纺创60日新高,上银鑫达灵活配置混合A基金重仓该股
- 1益生股份:公司12月父母代种鸡报价70元/套
- 2美团十大股东出炉,王兴持股9.11%,个人身家高达89亿美元?
- 3四川什邡一场灯光晚会 带领广大游客“云游”蓥华镇
- 4永定河启动最大流量脉冲试验 最大补水流量达500立方米/秒
- 5天津市出台保障性租赁住房新政 承租人申领居住证后可享积分落户政策
- 6中核向晶科能源采购光伏设备以开发云南80MW光伏电站
- 7晶澳、一道和锦州阳光拟中标中广核新能源2022年第一批组件集采01标段
- 8对户用光伏设计提出要求 山东省出台《低压分布式光伏计量采集典型设计方案》
- 9南方能监局:加强南方区域新型储能发展应用监管工作
- 10工信部:打造绿色低碳产品供给体系,实施智能光伏产业创新发展专项行动
广告
财经
- 国家统计局:2021年末并网太阳能发电装机30656万千瓦 增长20.9%
- 德国将100%实现可再生能源发电提前至2035年
- 西班牙Q-Energy到2025年将投资90亿欧元用于可再生能源
- 江苏南京与华能集团共建的中国能谷项目正式启动
- 天合光能与云南曲靖签约2GW光伏制造及地面光伏项目
- 京运通与天合光能签订2.9亿片硅片销售大单 合同金额24.5亿元
- 浙江温州瑞安拟投资150亿元建滩涂光伏项目
- 云南巍山整县光伏招商:5000万产业配套、约3000万租金一次性付清
- 新疆巴州风、光600MW竞配业主公示:中石油、国家电投、国家能源集团拟中标
- 农业农村部:支持有条件的脱贫地区发展光伏产业
- 希腊石油公司收购希腊的303兆瓦太阳能项目
- SB Energy与First Solar达成1.5GW太阳能组件交易
- 总投资5亿元 广西平果市100MW农光互补项目签约落地
- 通讯:守护“地球皮肤” 让“草原归绿”
- 浙江温州两社区全员核酸检测:24699人全部阴性
- 上海防空警报全市鸣响 逾226万人参加防空疏散演练
- 河南发布中秋、国庆风险提示:防范遏制重特大事故发生
- 攀枝花一男子凌晨在金沙江非法捕捞并暴力拒捕,已被刑拘
- 南沙港铁路建设者中秋不停工 守护心中别样“圆”
- “体育里的非遗”看新疆:少数民族传统体育项目蓬勃发展