Go定时器的三种实现方式:全球热点评
很多时候需要周期性的执行某些操作,就需要用到定时器。定时器有三种思路。
(资料图)
使用休眠,让当前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定时器的三种实现方式:全球热点评
很多时候需要周期性的执行某些操作,就需要用到定时器。定时器有三种思路。Sleep使用休眠,让当前Goroutine休眠一定的时间来实现定时的效果,
全球热点!第三届中国工业文学作品“光耀杯”大赛圆满收官 共89部作品获奖
2022年12月28日,第三届中国工业文学作品“光耀杯”大赛圆满收官,大赛颁奖典礼在工业和信息化部,广东省人民政府,广州市人民政府联合主办的《202
天天观热点:万润科技(002654)12月29日主力资金净卖出353.99万元
截至2022年12月29日收盘,万润科技(002654)报收于4 93元,上涨3 57%,换手率4 48%,成交量34 21万手,成交额1 65亿元。12月29
嗨袋借款逾期9年还不起会上征信系统吗
网贷逾期一般会上征信,有些借贷机构在用户逾期后一天后就会上报给征信机构,而有些借贷机构则是会在几天后上报给征信机构,因为有些借贷机构可
艾德生物(300685)12月28日主力资金净买入864.58万元|今热点
截至2022年12月28日收盘,艾德生物(300685)报收于25 54元,上涨4 8%,换手率1 29%,成交量5 14万手,成交额1 3亿元。12月28日的
10部门出台措施支持国家级经开区创新提升更好发挥示范作用_全球快资讯
新华社北京12月28日电(记者谢希瑶)商务部28日对外公布,商务部、国家发展改革委等10部门近日联合印发《关于支持国家级经济技术开发区创新提
江苏新能(603693.SH):国能投资终止非公开发行可交换公司债券
格隆汇12月28日丨江苏新能(603693)(603693 SH)公布,公司于2022年11月22日披露了《江苏省新能源开发股份有限公司关于持股5%以上股东拟非
灵川公安:严打组织偷越国(边)境违法犯罪行为:全球即时看
民警设卡拦截可疑车辆。灵川县公安局供图自全区公安机关岁末年初打击突出犯罪攻坚战开展以来,灵川县公安局按照“各司其职、协作配合、共享...
宋仲基新女友身份被扒,曾是英国情色片演员,颜值不输宋慧乔|每日快看
宋仲基新女友身份被扒,曾是英国情色片演员一个国民男神,一个大众女神,双宋恋本来是韩国最受瞩目的明星夫妇,然而两人的婚姻仅仅持续了两年
南通医院就诊须知汇总:热点评
南通市第一人民医院门急诊要求门急诊入口不再查验核酸证明和健康码,在就诊时全程规范佩戴N95口罩(无呼吸阀)或医用外科口罩;住院要求住院患
2023年中山兔年纪念币预约银行及入口(普通币)_世界热文
2023年中山兔年纪念币预约银行及入口(普通币)中山可预约银行中山市民可以通过中国工商银行、中国农业银行、中国邮政储蓄银行三家银行的线上
核酸和抗原已转阴,为何还会胸闷气短心率加快?专家:康复后仍需注意 快播报
近期,不少网友反映,自己在感染新冠病毒后,即使核酸和抗原都转为阴性,仍然存在胸闷气短的情况,有时心率还会在短暂活动后快速升高。那么,
环球热门:劲拓股份(300400.SZ):拟使用自有资金不超2亿元进行现金管理
格隆汇12月26日丨劲拓股份(300400)(300400 SZ)公布,公司于2022年12月26日召开第五届董事会第八次会议,审议通过了《关于使用自有资金进行
每日快报!外媒:韩国报告首例“食脑虫”病例
参考消息网12月26日报道据韩联社26日报道,韩国卫生部门称,韩国已报告首例福氏耐格里虫——或称“食脑变(@参考消息)
吃南瓜对血糖有影响吗? 环球播报
在糖尿病患者的食谱中,南瓜出现的概率很高,这是因为有观点称吃南瓜有助降低血糖,但是也有观点称南瓜属于高升糖指数的食物,糖尿病患者要少
邮你贷借款逾期9天会不会上征信
网贷逾期一般会上征信,有些借贷机构在用户逾期后一天后就会上报给征信机构,而有些借贷机构则是会在几天后上报给征信机构,因为有些借贷机构可
上海:商业创新活力强劲,重点商圈发展态势良好_世界快报
(记者许婧)23日发布的《上海商业发展报告(2022)》显示,上海的商业创新活力强劲,移动互联网时代基因明显;重点商圈发展态势良好,郊区商圈增
顺发恒业(000631)12月22日主力资金净买入672.35万元:当前速看
截至2022年12月22日收盘,顺发恒业(000631)报收于3 67元,上涨1 94%,换手率2 12%,成交量51 64万手,成交额1 95亿元。12月22
猪肉煮面要怎么炒才好吃 猪肉炒面怎么做
1、猪肉洗干净切成厚薄均匀的块状,放入老干妈、糖、酱油,用手抓匀。2、锅中煮滚水,下面条煮至八成熟捞出过凉水。3、另起一锅放油烧热,下姜
观点:器官移植设备企业健耕医药再次冲刺IPO 收入高度依赖美国市场
作者:涟漪11月24日,深交所官网显示,上海健耕医药科技股份有限公司(下称“健耕医药”)时隔近两年再次递交招股书,拟再次冲刺科创板。健...
【机构调研记录】新华基金调研亿田智能、和元生物等3只个股(附名单)
根据市场公开信息及12月21日披露的机构调研信息,新华基金近期对3家上市公司进行了调研,相关名单如下:1)亿田智能(证券之星综合指标:3 5星
这个波卡钱包可以让你玩转 NFT、XCM、Staking 和 Crowdloan|SubWallet 钱包体验报告|焦点关注
加入PolkaWorld社区,共建Web3 0!钱包是区块链生态的入口,一个好用的钱包可以让人你轻松地管理自己的资产,并与生态中的项目交互。在“波卡生
全球头条:华泰证券(06886.HK):2022年公司债券(第九期)按品种一利率3.24%发行
格隆汇12月21日丨华泰证券公布,2022年12月20日,发行人和主承销商在网下向专业投资者进行了票面利率询价。根据网下专业投资者询价结果,发行
山东省潍坊市潍城区 数字模式赋能基层智慧治理
今年以来,山东省潍坊市潍城区按照上级关于“健全基层智慧治理标准体系”的部署要求,统筹推进智慧社区建设,积极探索“1+1+N”数字化治理...
金都城:1785/86多顺利上行至1803! 全球视讯
黄金借助上周五的走势结构看涨幅延续,本周开盘周一就是低多思路,至日内整体波幅不大,而周一尾盘收尾阶段略有回撤,但是回撤力度不大,后市