這篇文章主要介紹“golang定時任務time.Sleep和time.Tick如何實現”,在日常操作中,相信很多人在golang定時任務time.Sleep和time.Tick如何實現問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”golang定時任務time.Sleep和time.Tick如何實現”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
Sleep是使用睡眠完成定時,結束后繼續往下執行循環來實現定時任務。
Tick函數是使用channel阻塞當前協程,完成定時任務的執行
現在來看一下 兩種方法實現出來的效果有何不同
這里我們設置定時時長為5
使用“Do Something” 來模擬定時任務執行需要的時間 分1s執行,10s執行兩種情況
代碼如下
func Test_Sleep(t *testing.T) { for i := 0; i < 3; i++ { Debug("begin", time.Now().Format("2006-01-02_15:04:05")) Debug("Do something 1s") time.Sleep(time.Second * 1) Debug("end", time.Now().Format("2006-01-02_15:04:05")) time.Sleep(time.Second * 5) } } func Test_Tick(t *testing.T) { t1 := time.NewTicker(5 * time.Second)(5 * time.Second) for { select { case <-t1.C: Debug("begin", time.Now().Format("2006-01-02_15:04:05")) Debug("Do something 1s") time.Sleep(time.Second * 1) Debug("end", time.Now().Format("2006-01-02_15:04:05")) } } }
Sleep結果1:
2019/04/19 15:58:51 |DEBUG|Test_Sleep()|77|begin 2019-04-19_15:58:51
2019/04/19 15:58:51 |DEBUG|Test_Sleep()|78|Do something 1s
2019/04/19 15:58:52 |DEBUG|Test_Sleep()|80|end 2019-04-19_15:58:52
2019/04/19 15:58:57 |DEBUG|Test_Sleep()|77|begin 2019-04-19_15:58:57
2019/04/19 15:58:57 |DEBUG|Test_Sleep()|78|Do something 1s
2019/04/19 15:58:58 |DEBUG|Test_Sleep()|80|end 2019-04-19_15:58:58
2019/04/19 15:59:03 |DEBUG|Test_Sleep()|77|begin 2019-04-19_15:59:03
2019/04/19 15:59:03 |DEBUG|Test_Sleep()|78|Do something 1s
2019/04/19 15:59:04 |DEBUG|Test_Sleep()|80|end 2019-04-19_15:59:04
設置任務執行時間為1s
end到下一次begin之間的間隔為5s (定時間隔)
其過程大致為:
|DO–>|Sleep---------->|Do–>|Sleep---------->|
Trick結果1
2019/04/19 16:22:09 |DEBUG|Test_Trick()|90|begin 2019-04-19_16:22:09
2019/04/19 16:22:09 |DEBUG|Test_Trick()|91|Do something 1s
2019/04/19 16:22:10 |DEBUG|Test_Trick()|93|end 2019-04-19_16:22:10
2019/04/19 16:22:14 |DEBUG|Test_Trick()|90|begin 2019-04-19_16:22:14
2019/04/19 16:22:14 |DEBUG|Test_Trick()|91|Do something 1s
2019/04/19 16:22:15 |DEBUG|Test_Trick()|93|end 2019-04-19_16:22:15
2019/04/19 16:22:19 |DEBUG|Test_Trick()|90|begin 2019-04-19_16:22:19
2019/04/19 16:22:19 |DEBUG|Test_Trick()|91|Do something 1s
2019/04/19 16:22:20 |DEBUG|Test_Trick()|93|end 2019-04-19_16:22:20
設置任務執行時間為1s
end到下一次begin之間的間隔為4s (定時間隔-任務執行時間)
其過程大致為:
(begin)Do–>(end)
|DO–>-----------|Do–>-------------|
|Sleep---------->|Sleep---------->|
Sleep結果2:
2019/04/19 16:32:41 |DEBUG|Test_Sleep()|77|begin 2019-04-19_16:32:41
2019/04/19 16:32:41 |DEBUG|Test_Sleep()|78|Do something 10s
2019/04/19 16:32:51 |DEBUG|Test_Sleep()|80|end 2019-04-19_16:32:51
2019/04/19 16:32:56 |DEBUG|Test_Sleep()|77|begin 2019-04-19_16:32:56
2019/04/19 16:32:56 |DEBUG|Test_Sleep()|78|Do something 10s
2019/04/19 16:33:06 |DEBUG|Test_Sleep()|80|end 2019-04-19_16:33:06
設置任務執行時間為10s
end到下一次begin之間的間隔為5s (定時間隔)
其過程大致為:
|DO-------------------->|Sleep---------->|Do-------------------->|Sleep---------->|
Trick結果2
2019/04/19 16:41:05 |DEBUG|Test_Tick()|90|begin 2019-04-19_16:41:05
2019/04/19 16:41:05 |DEBUG|Test_Tick()|91|Do something 10s
2019/04/19 16:41:15 |DEBUG|Test_Tick()|93|end 2019-04-19_16:41:15
2019/04/19 16:41:15 |DEBUG|Test_Tick()|90|begin 2019-04-19_16:41:15
2019/04/19 16:41:15 |DEBUG|Test_Tick()|91|Do something 10s
2019/04/19 16:41:25 |DEBUG|Test_Tick()|93|end 2019-04-19_16:41:25
設置任務執行時間為10s
end到下一次begin之間的間隔為0s
此時因為任務執行時間大于定時間隔 當任務執行完畢時 已經沒有阻塞 所以可以立馬執行下一次
其過程大致為:
(begin)Do–>(end)
|DO-------------------->|Do----------------------->|
|Sleep---------->-------|Sleep---------->---------|
到此,關于“golang定時任務time.Sleep和time.Tick如何實現”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。