Golang定時器的2種實現方法與區別

2022-09-21 17:12:12 字數 788 閱讀 6017

不得不說,golang的sdk做了太多的東西,定時器在golang裡實現起來非常的簡單

newticker() 方式

func foo()

func testticker(t *testing.t)

func testtimer(t *testing.t) {

timer :程式設計客棧= time.newtimer(time.second * 2)

程式設計客棧// 清理計時器

defer timer.stop()

for {

fmt.println("ticker start ", time.now().format("15:04:05"))

foo()

執行結果

可以看到,就執行了兩次就不動了

原因:newticker() 啟動後,會自己維護乙個過期時間的通道(channel)也就是**裡的 bntltbaqd間,然後再進行下一輪的傳送訊號執行方法

但newtimer()看原始碼會發現,它在sleep.go檔案裡定義的,也就是說newtimer()相當於乙個睡眠(延時執行)。時間一到,timer會通過管道發出乙個訊號告訴cpu該執行定時裡的**了,然後這個管道就銷毀了,除非使用 timer.reset(time.duration * 2) 來重新啟用這根管道,讓它重置定時的剩餘時間,到下一輪定訊號發www.cppcns.com出後,還要再次重置

所以在用定時時,還是newticker()方便

值得一提的是,當定時任務執行時間過長且超過定時的間隔時間時,定時的間隔時間到了之後會等待定時任務執行完才會進行下一輪的定時任務

golang定時器實現

golang定時器,需求是能夠在指定時間後停止。或某種條件出發停止。好,下面上貨。package main import context fmt sync time func main func stoptheworld func goclock for func goclock2 執行結果 123...

golang中的定時器

type timer struct乙個定時器,代表未來的乙個單一事件,你可以告訴timer你要等待多長時間,它提供乙個channel,在將來的那個時間channel提供了乙個時間值 time.newtimer時間到了,只響應一次 func main time.after 2 time.second ...

Golang之定時器,recover

滴答滴答 定時器的使用 package main import fmt time 定時器的使用 func main 一次定時器 package main import fmt time 定時器的使用 func main 超時控制 package main import fmt time func q...