很多時候需要周期性的執(zhí)行某些操作,就需要用到定時器。定時器有三種思路。
Sleep使用休眠,讓當(dāng)前Goroutine休眠一定的時間來實現(xiàn)定時的效果,缺點是程序執(zhí)行速度不均勻,導(dǎo)致定時周期不均勻。
for{fmt.Println(time.Now())time.Sleep(time.Second*1)}
(相關(guān)資料圖)
TimerGo語言的內(nèi)置包,指定一個時間開始計時,時間到之后會向外發(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í)行,我們來改造一下,把他變成定時器。
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的目的是為了防止形成死鎖,讓定時器最終能退出,在實際項目中可能需要一個永久運行的定時器,一般為了不影響項目主邏輯也會這樣定義。如果你的項目就是定時任務(wù),我建議也這么寫,這樣可以注冊很多個定時器互不影響。done是為了判斷執(zhí)行是否結(jié)束,防止主Goroutine提前退出。這個示例只有兩個case,實戰(zhàn)中如果有加其他case需要給每個case內(nèi)都做一次Reset,保證重置定時器。Ticker
相比上述使用延遲執(zhí)行功能實現(xiàn)的定時器,Ticker本身就是一個定時器(內(nèi)部封裝了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 一節(jié)中講述的官方超時控制方案非常的實用,也是使用的此函數(shù)。還使用到timer.Stop和timer.Reset這兩個內(nèi)置函數(shù)這里就不展開講解了,建議進(jìn)行復(fù)習(xí)。
小結(jié)定時器一般用來周期性執(zhí)行任務(wù),比如定時同步數(shù)據(jù)、計算報表、發(fā)送通知。
time.Sleep使用休眠,讓當(dāng)前goroutine休眠一定的時間來實現(xiàn)定時的效果,缺點是內(nèi)部邏輯執(zhí)行的速度會影響到定時器的時間差,無法做到精確間隔。Timer類似于Sleep的延遲處理,通過channel來獲得通知,也可以改造成定時器。因為是延遲處理,所以要記得重置時間來實現(xiàn)定時執(zhí)行的效果。Ticker現(xiàn)成的定時器,內(nèi)部也是封裝了 Timer。雪峰科技最新股東戶數(shù)3 36萬戶,呈現(xiàn)連續(xù)4期下降,低于行業(yè)平均水平。公司戶均持有流通股份1 96萬股;...
1月10日,華夏中證新能源汽車ETF最新單位凈值為1 7715元,累計凈值為1 7715元,較前一交易日上漲1 14...
四集電視專題片《永遠(yuǎn)吹沖鋒號》第四集《永遠(yuǎn)在路上》,將于1月10日在中央電視臺綜合頻道晚8點檔播出。...
1月9日天津自貿(mào)區(qū)板塊較上一交易日下跌1 68%,卓朗科技領(lǐng)跌。當(dāng)日上證指數(shù)報收于3176 08,上漲0 58%...
新華社濟南1月9日電(記者張武岳)2022-2023賽季中國男子籃球職業(yè)聯(lián)賽(CBA)常規(guī)賽第24輪9日結(jié)束6場較...
抖音聊天一小步,“截胡”微信一大步?@新熵原創(chuàng)作者丨櫻木編輯丨月見新年伊始,抖音再次潛入了微信的后...
1、新鮮蘆薈葉汁涂抹法:在蘆薈植株下部剪取一小塊蘆薈葉片洗凈,將蘆薈葉的表皮撕去,輕輕地將蘆薈液汁...
智通財經(jīng)APP訊,長久物流發(fā)布公告,公司于2023年1月5日接到控股股東長久集團(tuán)通知,獲悉其所持有公司的59...
作者|磊哥來源|Java中文社群(ID:javacn666)轉(zhuǎn)載請聯(lián)系授權(quán)(微信ID:GG_Stone)人生匆匆三十四余載,...
萬潤股份(002643)01月06日在投資者關(guān)系平臺上答復(fù)了投資者關(guān)心的問題。
?申購家庭應(yīng)攜帶以下材料到場選房:1 本市戶籍居民家庭提交申請核驗人及家庭成員身份證(家庭成員是現(xiàn)...
據(jù)大公網(wǎng)報導(dǎo),香港與內(nèi)地最快1月8日有序全面通關(guān)。闊別三年,從福田口岸去香港有哪些新變化?1月4日,...
平?jīng)鍪强刂莆鞅钡慕煌ㄒ?,這里既是通往西域最為便捷的路徑,也是連接塞外的要道。
本次活動結(jié)合市民歲末團(tuán)聚和新春團(tuán)圓的寓意,融合年俗、年味、年禮、年歡、年趣,因時制宜打造重慶火鍋...
1月3日,嘉實穩(wěn)惠6個月持有期混合A最新單位凈值為1 009元,累計凈值為1 009元,較前一交易日上漲0 58...
證券代碼:300677證券簡稱:英科醫(yī)療公告編號:2023-001債券代碼:123029債券簡稱:英科轉(zhuǎn)債英科醫(yī)療科
公共關(guān)系活動必須始終堅持和遵循以下基本原則:1、尊重事實原則。真實是公共關(guān)系的生命。尊重事實就是一...
證券時報網(wǎng)訊,申萬宏源發(fā)布策略研報指出,短期成長相對價值的性價比已調(diào)整到位,春季行情消費搭臺,打...
2022年12月29日申聯(lián)生物融資凈償還18 76萬元,融資余額4292 91萬元
格隆匯12月29日丨瑞可達(dá)(688800 SH)公布,2022年5月21日公司披露了《關(guān)于自愿披露投資設(shè)立境外子公司的...
我的玩具樂高直升飛機作文第一篇我的心愛之物不是動物、植物,也不是文具、工藝品,和別人的都不一樣,...
近期A股影視板塊再現(xiàn)普漲。與此同時,全國院線恢復(fù)營業(yè)的比例也在不斷提高。不過相較于市場樂觀情緒,近...
12月21日,NinepointPartnersLP的合伙人兼高級投資組合經(jīng)理EricNuttall表示,2023年油價將回到每桶100美...
俄羅斯總統(tǒng)普京12月27日簽署政令,從2023年2月1日起,禁止向俄羅斯石油實施價格上限的國家出口石油產(chǎn)品...
2號線具體站點為:玉洞站-金象站-石子塘站-大沙田站-五象大道站、江南客運站-白沙大道站-石柱嶺站-福建...
X 關(guān)閉
X 關(guān)閉