Go定時(shí)器的三種實(shí)現(xiàn)方式_全球快資訊
很多時(shí)候需要周期性的執(zhí)行某些操作,就需要用...
很多時(shí)候需要周期性的執(zhí)行某些操作,就需要用到定時(shí)器。定時(shí)器有三種思路。
Sleep使用休眠,讓當(dāng)前Goroutine休眠一定的時(shí)間來(lái)實(shí)現(xiàn)定時(shí)的效果,缺點(diǎn)是程序執(zhí)行速度不均勻,導(dǎo)致定時(shí)周期不均勻。
for{fmt.Println(time.Now())time.Sleep(time.Second*1)}
(相關(guān)資料圖)
TimerGo語(yǔ)言的內(nèi)置包,指定一個(gè)時(shí)間開始計(jì)時(shí),時(shí)間到之后會(huì)向外發(fā)送通知,發(fā)送通知的方式就是使用<-chan Time返回內(nèi)容。
第一種方式,直接在需要等待處使用,效果和Sleep一樣,一使用就卡在那了內(nèi)部就是使用了Timer。
fmt.Println(time.Now())<-time.After(1*time.Second)fmt.Println(time.Now())
也可以把他拆分開,在任意地方進(jìn)行等待
timer:=time.NewTimer(1*time.Second)<-timer.Cfmt.Println(time.Now())
但是以上只是做到延遲一次性執(zhí)行,我們來(lái)改造一下,把他變成定時(shí)器。
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的目的是為了防止形成死鎖,讓定時(shí)器最終能退出,在實(shí)際項(xiàng)目中可能需要一個(gè)永久運(yùn)行的定時(shí)器,一般為了不影響項(xiàng)目主邏輯也會(huì)這樣定義。如果你的項(xiàng)目就是定時(shí)任務(wù),我建議也這么寫,這樣可以注冊(cè)很多個(gè)定時(shí)器互不影響。done是為了判斷執(zhí)行是否結(jié)束,防止主Goroutine提前退出。這個(gè)示例只有兩個(gè)case,實(shí)戰(zhàn)中如果有加其他case需要給每個(gè)case內(nèi)都做一次Reset,保證重置定時(shí)器。Ticker
相比上述使用延遲執(zhí)行功能實(shí)現(xiàn)的定時(shí)器,Ticker本身就是一個(gè)定時(shí)器(內(nèi)部封裝了Timer),我們使用起來(lái)就非常簡(jiǎn)單。
ticker:=time.NewTicker(1*time.Second)gofunc(){for{<-ticker.Cfmt.Println(time.Now())}}()<-time.After(5*time.Second+time.Millisecond*100)ticker.Stop()
在select 一節(jié)中講述的官方超時(shí)控制方案非常的實(shí)用,也是使用的此函數(shù)。還使用到timer.Stop和timer.Reset這兩個(gè)內(nèi)置函數(shù)這里就不展開講解了,建議進(jìn)行復(fù)習(xí)。
小結(jié)定時(shí)器一般用來(lái)周期性執(zhí)行任務(wù),比如定時(shí)同步數(shù)據(jù)、計(jì)算報(bào)表、發(fā)送通知。
time.Sleep使用休眠,讓當(dāng)前goroutine休眠一定的時(shí)間來(lái)實(shí)現(xiàn)定時(shí)的效果,缺點(diǎn)是內(nèi)部邏輯執(zhí)行的速度會(huì)影響到定時(shí)器的時(shí)間差,無(wú)法做到精確間隔。Timer類似于Sleep的延遲處理,通過(guò)channel來(lái)獲得通知,也可以改造成定時(shí)器。因?yàn)槭茄舆t處理,所以要記得重置時(shí)間來(lái)實(shí)現(xiàn)定時(shí)執(zhí)行的效果。Ticker現(xiàn)成的定時(shí)器,內(nèi)部也是封裝了 Timer。關(guān)鍵詞:
5月19日,證券板塊整體跌幅0 09%,但方正證券上漲3 78%,漲幅位居板塊第一。消息面上,方正證券發(fā)布公告稱,大連中院依法作出執(zhí)行裁定書,
深圳商報(bào) 2022-05-20近來(lái),不少權(quán)益基金放開限購(gòu)、開門迎客,其中不乏明星基金經(jīng)理旗下產(chǎn)品。與此同時(shí),大量債券基金卻收緊了申購(gòu)門檻,個(gè)別將限購(gòu)金額上限定為
深圳商報(bào) 2022-05-20在排隊(duì)11個(gè)月后,國(guó)產(chǎn)汽水第一股冰峰飲料上會(huì)前主動(dòng)撤回申請(qǐng)資料,這意味著其IPO告吹。發(fā)審委18日晚稱,因冰峰飲料撤回申報(bào)材料,故取消19
深圳商報(bào) 2022-05-2023年過(guò)去,A股市場(chǎng)發(fā)生了翻天覆地的變化。同花順數(shù)據(jù)顯示,1999年5月19日,A股上市公司只有857家,A股總市值僅有2 05萬(wàn)億元。而今年5月19日
深圳商報(bào) 2022-05-20深圳創(chuàng)新能力,再獲國(guó)家首肯。23家深圳專精特新小巨人,進(jìn)入國(guó)家專精特新中小企業(yè)高質(zhì)量發(fā)展最新建議支持名單。按照安排,國(guó)家將拿出100億
深圳商報(bào) 2022-05-20中新經(jīng)緯11月24日電 (張澍楠)雖說(shuō)三百六十行,行行出狀元,但行業(yè)之間的差距,仍然很大。究竟什么行業(yè)“最香”?被視為“高富帥”的金
2021-11-24新華社鄭州11月23日電(記者馮大鵬)在“狗咬人”輿情發(fā)酵后,23日晚,河南安陽(yáng)通報(bào)了對(duì)涉“狗咬人”事件責(zé)任單位和責(zé)任人的處理決定。
2021-11-245月19日,證券板塊整體跌幅0 09%,但方正證券上漲3 78%,漲幅位居板塊第一。消息面上,方正證券發(fā)布公告稱,大連中院依法作出執(zhí)行裁定書,
深圳商報(bào) 2022-05-20近來(lái),不少權(quán)益基金放開限購(gòu)、開門迎客,其中不乏明星基金經(jīng)理旗下產(chǎn)品。與此同時(shí),大量債券基金卻收緊了申購(gòu)門檻,個(gè)別將限購(gòu)金額上限定為
深圳商報(bào) 2022-05-20在排隊(duì)11個(gè)月后,國(guó)產(chǎn)汽水第一股冰峰飲料上會(huì)前主動(dòng)撤回申請(qǐng)資料,這意味著其IPO告吹。發(fā)審委18日晚稱,因冰峰飲料撤回申報(bào)材料,故取消19
深圳商報(bào) 2022-05-2023年過(guò)去,A股市場(chǎng)發(fā)生了翻天覆地的變化。同花順數(shù)據(jù)顯示,1999年5月19日,A股上市公司只有857家,A股總市值僅有2 05萬(wàn)億元。而今年5月19日
深圳商報(bào) 2022-05-20深圳創(chuàng)新能力,再獲國(guó)家首肯。23家深圳專精特新小巨人,進(jìn)入國(guó)家專精特新中小企業(yè)高質(zhì)量發(fā)展最新建議支持名單。按照安排,國(guó)家將拿出100億
深圳商報(bào) 2022-05-20中新經(jīng)緯11月24日電 (張澍楠)雖說(shuō)三百六十行,行行出狀元,但行業(yè)之間的差距,仍然很大。究竟什么行業(yè)“最香”?被視為“高富帥”的金
2021-11-24新華社鄭州11月23日電(記者馮大鵬)在“狗咬人”輿情發(fā)酵后,23日晚,河南安陽(yáng)通報(bào)了對(duì)涉“狗咬人”事件責(zé)任單位和責(zé)任人的處理決定。
2021-11-24很多時(shí)候需要周期性的執(zhí)行某些操作,就需要用...
22湖南銀行CD266發(fā)布發(fā)行公告
12月28日歐晶科技(001269)漲10 00%,收盤報(bào)...
1、小番茄洗凈,每個(gè)切成4-6瓣的西瓜樣放在托...
連續(xù)兩個(gè)月回升!6月份中國(guó)物流業(yè)景氣指數(shù)為52.1%
山西長(zhǎng)子“羊倌”養(yǎng)羊20余年 帶動(dòng)700余戶養(yǎng)殖戶發(fā)“羊財(cái)”
上海首個(gè)“兩山”實(shí)踐創(chuàng)新基地成功創(chuàng)建
廣西醫(yī)科大一附院向越南捐贈(zèng)醫(yī)療防疫物資
黃埔海關(guān)破獲案值5.5億元走私進(jìn)口二手挖掘機(jī)案
Copyright 2015-2022 北方倉(cāng)儲(chǔ)網(wǎng)版權(quán)所有 備案號(hào):京ICP備2021034106號(hào)-50 聯(lián)系郵箱: 55 16 53 8@qq.com