Go定时器的三种实现方式
2022-12-29 10:18:37 来源:
很多时候需要周期性的执行某些操作,就需要用到定时器。定时器有三种思路。
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定时器的三种实现方式
-
接连三天晴 晒被子喽
-
收评:收官之前最后一碗“阳春面”!今天没有跳水主力已是手下留情,北向资金全天买入,明天或可期待。|全球观热点
-
中国铁建确定20亿元公司债券利率为3.75% 讯息
-
【天天新要闻】博拓生物(688767)12月27日主力资金净卖出1800.77万元
-
汉威科技(300007):监事会换届选举-世界焦点
-
即时看!四川自贡警方破获一起特大养老诈骗案:抓获主犯39人 涉案近2亿元
-
借呗贷款逾期五年还不起征信有什么影响 全球热闻
-
世界百事通!迎峰度冬,要屋暖也要天蓝
-
鼎汉技术(300011.SZ):子公司中标4091.75万元广州地铁集团有限公司既有线列车360°图像在线检测系统设备采购项目_天天热消息
-
瑞可达董秘回复:因公司与众多合作客户签署有保密协议,涉及具体事项不便对外披露,感谢您的理解 环球热点评
-
盛新锂能:公司正在全力推动萨比星矿山的开发建设,项目预计在2023年一季度建成-环球时快讯
-
寒潮来袭 加拿大部分地区交通受阻电力中断
-
极市直播预告丨NeurIPS 2022 Oral-张博航:如何从模型层面获得对抗鲁棒性保证?
-
鼎泰高科:公司将持续深耕主业,致力于为PCB、数控精密机件等领域的企业提供工具、材料、装备的一体化解决方案,不断增强公司核心竞争力
-
海南橡胶董秘回复:海南橡胶一贯高度重视ESG相关工作,践行社会责任与促进公司发展相结合
-
天佑德酒:您可拨打客服电话4009969969咨询
-
避孕方式繁多 选择正确避孕方法是关键|天天热资讯
-
报道:普源精电(688337):国泰君安证券股份有限公司关于普源精电科技股份有限公司2022年度持续督导工作现场检查报告
-
热点评!中国联通(00762.HK)早盘跳空高开,盘中涨逾4%
推荐内容
- Go定时器的三种实现方式
- 接连三天晴 晒被子喽
- 收评:收官之前最后一碗“阳春面”!今天没有跳水
- 中国铁建确定20亿元公司债券利率为3.75% 讯息
- 【天天新要闻】博拓生物(688767)12月27日主力资
- 汉威科技(300007):监事会换届选举-世界焦点
- 即时看!四川自贡警方破获一起特大养老诈骗案:抓
- 借呗贷款逾期五年还不起征信有什么影响 全球热闻
- 世界百事通!迎峰度冬,要屋暖也要天蓝
- 鼎汉技术(300011.SZ):子公司中标4091.75万元广州
- 瑞可达董秘回复:因公司与众多合作客户签署有保密
- 盛新锂能:公司正在全力推动萨比星矿山的开发建设
- 寒潮来袭 加拿大部分地区交通受阻电力中断
- 极市直播预告丨NeurIPS 2022 Oral-张博航:如何
- 鼎泰高科:公司将持续深耕主业,致力于为PCB、数
- 海南橡胶董秘回复:海南橡胶一贯高度重视ESG相关
- 天佑德酒:您可拨打客服电话4009969969咨询
- 避孕方式繁多 选择正确避孕方法是关键|天天热资讯
- 报道:普源精电(688337):国泰君安证券股份有限公
- 热点评!中国联通(00762.HK)早盘跳空高开,盘中涨逾4%
- 【全球播资讯】中国管业(00380)发布中期业绩 权
- 宿舍因床位过多通道仅留1人宽 难道没有安全隐患
- 【环球新要闻】安捷股份拟投资255万设立控股子公
- 文一科技(600520):文一科技持股5%以上股东违规减
- 阿里巴巴发布2023财年Q1财报 连续五个季度亏损同
- 深圳智能终端产业呈现强大韧性 到2025年产业增加
- 老人突发身体不适 梅园新村民警及时救助获赠锦旗
- 低头看手机惹的祸 南京一司机闯红灯被撞损失惨重
- 三岁小男孩意外走失 民警多方工作帮助找到家人
- 一家三口登山被困在灌云大伊山上 消防人员紧急救援
- 海陵民警化身“背包客” 为行动不便老人补办身份证
- 南京一男子酒后开车撞上花坛直接侧翻 迎面碰上了
- “求助人”变“嫌疑人” 南京鼓楼警方破获一起盗
- 老人看电视突然呼吸困难 民警接警火速救助
- 陕西两万五千吨市政桥梁完成“转身”
- 河北邯郸发生天然气泄漏事故致3人死亡
- 兰州40家A级旅游景区暂时关闭 开放时间暂定
- 湖北警方打掉两跨省“跑分”洗钱犯罪团伙
- 新冠肺炎疫情下如何保护孩子?张文宏建议设儿童专
- 海南儋州出现1例治愈后的境外输入病例复阳人员
油气
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
经济
-
中新网通辽10月18日电 (记者 张林虎)18日,记者从内蒙古自治区通辽市奈曼旗公安局获悉,国家一级保护动物--梅花鹿误入当地村民羊群,
-
中新网杭州10月18日电 (王题题 胡燕婕)云天收夏色,浅秋正渐浓。10月18日,浙江杭州市西湖游船有限公司推出的惠民多站点“西湖环湖游
-
中新网福州10月18日电 (记者 龙敏 王东明)福州市晋安区官方18日晚间通报,18日14时47分,晋安区岳峰镇化工路爱摩轮商业广场项目摩天
-
中新网兰州10月18日电 (闫姣 艾庆龙 吉翔)“红山白土头,黄河向西流。”不少人疑问,天下黄河向东流,为何甘肃永靖县这段黄河却向西
-
中新网北京10月18日电 《清华城市健康设施指数》18日在北京发布。报告成果显示,城市健康设施指数领先城市以中心城市和东部沿海城市