很多时候需要周期性的执行某些操作,就需要用到定时器。定时器有三种思路。
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定时器的三种实现方式|世界热闻
很多时候需要周期性的执行某些操作,就需要用到定时器。定时器有三种思路。Sleep使用休眠,让当前Goroutine休眠一定的时间来实现定时的效果,
-
环球最新:万国数据-SW(09698.HK)继续走高,尾盘升约9%
万国数据-SW(09698 HK)继续走高,尾盘升约9%。机构指,数据中心板块23年需求端有望企稳回升,推荐万国数据,公司需求复苏较预期有望提前。公司
-
世界快看:河北广宗发现一战国陶豆 距今2000多年
记者从河北省邢台市广宗县文保部门获悉,文保人员日前对当地文物普查时发现一战国陶制食器陶豆,保存较为完整,距今已有2000多年。
-
每日速递:美国入侵巴拿马33周年丨战争亲历者讲述民主幌子背后的骗局
战争亲历者菲茨罗伊:从这条街道的边缘到那边的海岸线(巴拿马体育馆所在地)曾经有许多尸体,美国人洒上了白色的石灰粉,防止生虫,然后他们
-
嘉澳环保(603822)投资设立孙公司,股民索赔已获立案
浙江嘉澳环保科技股份有限公司(嘉澳环保,603822)在2022年12月20日发布了《关于投资设立孙公司的公告》。公告内容显示,公司子公司连云港嘉
-
众生药业董秘回复:肝病研发管线,公司布局了五个治疗非酒精性脂肪性肝炎(NASH)的创新药_当前看点
众生药业(002317)12月21日在投资者关系平台上答复了投资者关心的问题。
-
天天热推荐:冀鲁等地推迟举行2022年度税务师职业资格考试
题:冀鲁等地推迟举行2022年度税务师职业资格考试 中新财经记者赵建华 中国注册税务师协会近日发布公告,河北省、山东省等地区推迟举行2
-
全球视点!立赫商务退出盛旭企管100%股权 上海永升物业接盘
12月17日,据企查查信息披露,上海立赫商务咨询有限公司转让重庆盛旭企业管理咨询有限公司100%股权,上海永升物业管理有限公司接盘。资料显示
-
微博贷款28万4年没还会有什么后果_每日短讯
网贷逾期一般会上征信,有些借贷机构在用户逾期后一天后就会上报给征信机构,而有些借贷机构则是会在几天后上报给征信机构,因为有些借贷机构可
-
钱流看经济 | 促消费组合拳 助燃城市“烟火气”-热门看点
央视网消息:中国经济的发展动力,不只在投资中,也蕴藏在巨大的消费市场里。近期,随着疫情防控措施的调整优化,如何刺激消费、搞活经济,更
-
我国实现生物航煤绿色国际货运首飞
记者19日从中国石化新闻办获悉,近日,中国大陆首个使用可持续航空燃料的商业货运航班完成首飞。该航班使用的是中国石化镇海炼化生产的生物航
-
世界动态:当虹科技:12月16日融券卖出金额63.79万元,占当日流出金额的4.57%
同花顺数据中心显示,当虹科技12月16日获融资买入379 13万元,占当日买入金额的34 19%,当前融资余额1 22亿元,占流通市值的5 49%,超过历史70
-
请问提钱花借款逾期1年可以延期还款吗?
网贷逾期一般会上征信,有些借贷机构在用户逾期后一天后就会上报给征信机构,而有些借贷机构则是会在几天后上报给征信机构,因为有些借贷机构可
-
李诞接过了罗永浩的棒 | 深论-今日看点
是新朋友吗?记得先点蓝字关注我哦~点击关注陈博每日观察,置顶公众号每日时事的观察与点评 干货集中营 分享每月精彩瞬间(图片源于百度侵删
-
世界热议:德邦科技(688035)12月16日主力资金净卖出2214.61万元
截至2022年12月16日收盘,德邦科技(688035)报收于57 99元,下跌4 23%,换手率6 72%,成交量1 98万手,成交额1 16亿元。12月16
-
知名银行宣布关闭中国大陆个人银行业务!网点将关、房贷仍需按时还
知名银行宣布关闭中国大陆个人银行业务!网点将关、房贷仍需按时还
-
柴油发电机组机油渗漏的原因
柴油发电机组机油渗漏可分为静接合面的渗漏和动接触面的渗漏一、静接合面机油渗漏原因1)机油压力过高也会引起静接合面机油渗漏。2)采用密封
-
讯息:奔驰生产线全面电动化转型,2024年将投10亿美元
车东西(公众号:chedongxi)作者丨川徐编辑丨Juice车东西12月15日消息,据外媒TESLARATI报道,梅赛德斯公布了未来几年转向电动汽车传动系统生
-
江苏国信: 独立董事关于关于公司第五届董事会第二十五次会议相关事项的独立意见-今日视点
江苏国信:独立董事关于关于公司第五届董事会第二十五次会议相关事项的独立意见
-
要闻速递:ST龙净:截止目前公司已收回全部占用资金及利息,收回剩余超额预付工程款
(原标题:ST龙净:截止目前公司已收回全部占用资金及利息,收回剩余超额预付工程款)同花顺(300033)金融研究中心12月15日讯,有投资者向ST