很多时候需要周期性的执行某些操作,就需要用到定时器。定时器有三种思路。
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。X 关闭
- 1、重点聚焦!提钱花网贷逾期一个月会不会上征信
- 2、世界新动态:江苏省徐州市云龙区的普通产假是多少天?
- 3、每日信息:金达威(002626)12月27日主力资金净买入1849.12万元
- 4、当前焦点!威法、玛格、图森相继冲击IPO 谁会成为高定家居第一股?
- 5、快看点丨珠海零售药店的抗原检测试剂购买要登记吗?
- 6、世界实时:山东成武:推进人居环境整治 城乡宜业更宜居
- 7、【环球报资讯】卫健委:县级以上医疗机构按三个月的日常使用量动态准备新型相关治疗药物
- 8、天天速讯:杉杉股份: 杉杉股份关于以集中竞价交易方式回购股份方案的公告
- 9、环球微头条丨江苏南京江宁开发区赴泰国精准招商 打造储能产业新高地
- 10、今日要闻!梅州交通违章处理需要哪些材料?
-
每日快报!经济日报年终述评⑥:粮食安全基础稳固
今年我国粮食再次高位增产,“大国粮仓”更加充盈,百姓的“米袋子”更加殷实。面对风高浪急的国际环境和艰巨繁重的国内改革发展稳定任务,我
-
全球视点!德国总统发表讲话,呼吁在危机面前保持团结和信心
和平是民众最热切的渴望,他号召德国和欧洲团结一致、共同面对“艰难的时刻”,依靠巨大的凝聚力度过危机
-
即时焦点:突然官宣怀孕!全网炸了:和郑恺分手5年后,她竟然过成了这样?
作者:捡书姑娘来源:捡书姑娘ID:jianshu126近期内娱的热闹,全由京城四少汪公子买单了。这不,就连娱乐圈又曝个孩子这样的大喜事,都没能引
-
世界即时看!同心互助聚合力——沈阳一线疫情防控见闻
“我有药”“我家也有”“到我家取”……近日,沈阳市浑南区一社区居民微信群上演了爱心接力的一幕。“孩子发烧了,我只问了一句‘谁家有药’
-
世界球精选!周兆成律师解读“异地购药”是否合法,疫情当下该如何防范
在疫情管控放开之后,我们发现周围的小阳人越来越多了,这不免让人感觉到人心惶惶的,生怕自己中招了。而因为放开的太过突然,导致各地药店的
-
全球新消息丨Go定时器的三种实现方式
很多时候需要周期性的执行某些操作,就需要用到定时器。定时器有三种思路。Sleep使用休眠,让当前Goroutine休眠一定的时间来实现定时的效果,
-
【环球快播报】捷信贷款逾期了11个月会产生什么后果
网贷逾期一般会上征信,有些借贷机构在用户逾期后一天后就会上报给征信机构,而有些借贷机构则是会在几天后上报给征信机构,因为有些借贷机构可
-
世界观察:成都市市场监管局呼吁:合理购药、用药,不要盲目囤积涉疫药品
四川经济网讯(记者苏俊毛春燕)12月22日,成都市举行疫情防控工作新闻发布会。成都市卫健委副主任黄辉,成都市委教育工委委员、成都市人民政
-
全球观热点:看好装机需求,两公司拿下90亿元光伏玻璃长单
有分析师判断,伴随硅料环节价格出现松动,2023年光伏新增装机有望在产业链价格下降趋势带动下继续保持较高增速
-
当前要闻:国家邮政局:1-11月邮政行业寄递业务量累计完成1263.1亿件 同比增长3.1%
据国家邮政局12月21日消息,国家邮政局公布2022年11月邮政行业运行情况。1-11月,邮政行业寄递业务量累计完成1263 1亿件,同比增长3 1%。其中