天天观焦点:Go定时器的三种实现方式
时间:2022-12-29 16:20:16
很多时候需要周期性的执行某些操作,就需要用到定时器。定时器有三种思路。
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。最新文章推荐
- 市值超500亿元 兴发集团二季度净利预增10%-16%
- 提前结募!首单清洁能源公募REITs鹏华深圳能源REIT正式发行
- 郑州:多措并举促消费、扩投资、活出口 全力以赴夺取首季开门红
- 中央一号文件再聚焦乡村振兴:农村物流“最后一公里”要来了
- 券业“入门考试”迎规则修订拟调整成绩管理模式
- 郑州:多措并举促消费、扩投资、活出口 全力以赴夺取首季开门红
- 2025年 濮阳将建成数字经济和信息化发展新高地
- “一张蓝图”打造高校智慧校园“样板间” 中央民族大学这样做
- 江西财经大学“映山红”研究生支教团获第25届江西青年五四奖章
- “职等你来就业同行” 百日千万网络招聘行动启动
X 关闭
资讯中心
2022-08-29
2022-08-15
2022-05-20
2021-10-18
X 关闭
热点资讯
-
1
天天观焦点:Go定时器的三种实现方式
-
2
异动快报:ST大集(000564)12月29日14点3分触及涨停板
-
3
全球信息:欧洲第二场战争,即将爆发?
-
4
我阳了...-世界信息
-
5
仕佳光子(688313):实际控制人及5%以上股东间接增持公司股份的提示性_环球看点
-
6
国家新闻出版署发布12月国产网络游戏审批信息 共84款游戏获批_每日热点
-
7
世界报道:如何管理一家创业奶茶店?
-
8
动视暴雪波士顿工作室员工宣布将成立工会
-
9
每日信息:河北国资接盘,华夏幸福“卖子”回笼10亿元
-
10
每日观察!百里荒滑雪场门票价格是多少?(附近期优惠)
-
11
外汇天眼:美国11月PCE如期降温,但通胀回归目标水平道阻且长! 热门
-
12
天天快报!北京多家社区医院回应配给Paxlovid新冠口服药 “已接到相关培训通知”
-
13
看点:打通乡镇村医疗卫生服务“最后一公里” 保障群众就医
-
14
行业风向标:“降本”技术迭代为主旋律 光伏技术催新生|世界即时
-
15
全球球精选!北京本地游强势复苏 滑雪场客流逐渐回升
-
16
天天观察:47岁李玟与肌肉男亲密搂抱!两人贴身毫不避嫌,穿吊带春光乍现
-
17
世界快看点丨记一次QQ找回经历
-
18
叮当钱包逾期12个月会怎样?
-
19
苏州固锝: 关于公司2022年员工持股计划完成非交易过户的公告 天天最新
-
20
预制菜是否带动了日本农副业的发展?——预制菜在线对话日本友通株式会社