欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解golang 定時(shí)任務(wù)time.Sleep和time.Tick實(shí)現(xiàn)結(jié)果比較

 更新時(shí)間:2022年02月20日 10:43:43   作者:alphaTao  
本文主要介紹了golang 定時(shí)任務(wù)time.Sleep和time.Tick實(shí)現(xiàn)結(jié)果比較,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

總的來說

  • Sleep是使用睡眠完成定時(shí),結(jié)束后繼續(xù)往下執(zhí)行循環(huán)來實(shí)現(xiàn)定時(shí)任務(wù)。
  • Tick函數(shù)是使用channel阻塞當(dāng)前協(xié)程,完成定時(shí)任務(wù)的執(zhí)行

現(xiàn)在來看一下 兩種方法實(shí)現(xiàn)出來的效果有何不同

這里我們?cè)O(shè)置定時(shí)時(shí)長(zhǎng)為5

使用“Do Something” 來模擬定時(shí)任務(wù)執(zhí)行需要的時(shí)間 分1s執(zhí)行,10s執(zhí)行兩種情況

代碼如下

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結(jié)果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

設(shè)置任務(wù)執(zhí)行時(shí)間為1s
end到下一次begin之間的間隔為5s (定時(shí)間隔)
其過程大致為:
|DO–>|Sleep---------->|Do–>|Sleep---------->|

Trick結(jié)果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

設(shè)置任務(wù)執(zhí)行時(shí)間為1s
end到下一次begin之間的間隔為4s (定時(shí)間隔-任務(wù)執(zhí)行時(shí)間)
其過程大致為:
(begin)Do–>(end)
|DO–>-----------|Do–>-------------|
|Sleep---------->|Sleep---------->|

Sleep結(jié)果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

設(shè)置任務(wù)執(zhí)行時(shí)間為10s
end到下一次begin之間的間隔為5s (定時(shí)間隔)
其過程大致為:
|DO-------------------->|Sleep---------->|Do-------------------->|Sleep---------->|

Trick結(jié)果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

設(shè)置任務(wù)執(zhí)行時(shí)間為10s
end到下一次begin之間的間隔為0s
此時(shí)因?yàn)槿蝿?wù)執(zhí)行時(shí)間大于定時(shí)間隔 當(dāng)任務(wù)執(zhí)行完畢時(shí) 已經(jīng)沒有阻塞 所以可以立馬執(zhí)行下一次
其過程大致為:
(begin)Do–>(end)
|DO-------------------->|Do----------------------->|
|Sleep---------->-------|Sleep---------->---------|

總結(jié)

從sleep和tick的實(shí)現(xiàn)結(jié)果的比較來看 可以發(fā)現(xiàn)

1.sleep進(jìn)行定時(shí)任務(wù) 任務(wù)執(zhí)行的時(shí)間對(duì)其實(shí)際定時(shí)間隔沒有影響 睡眠緊跟在任務(wù)結(jié)束后
2.sleep的定時(shí)間隔時(shí)間 = 上一個(gè)end 到 下一個(gè)begin 的時(shí)間
3.而tick的實(shí)現(xiàn) 使用了一個(gè)協(xié)程來進(jìn)行定時(shí) 任務(wù)執(zhí)行的時(shí)間會(huì)對(duì)其實(shí)際間隔時(shí)間產(chǎn)生影響
4.tick的(上一個(gè)begin到下一個(gè)begin時(shí)間) = max (定時(shí)間隔時(shí)間, 任務(wù)執(zhí)行時(shí)間)

至于孰好孰壞 好像一般都是推薦tick 不過還是要看具體的環(huán)境再來決定

參考:http://www.dbjr.com.cn/article/211330.htm

到此這篇關(guān)于詳解golang 定時(shí)任務(wù)time.Sleep和time.Tick實(shí)現(xiàn)結(jié)果比較的文章就介紹到這了,更多相關(guān)golang time.Sleep和time.Tick內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Golang實(shí)現(xiàn)拓?fù)渑判?DFS算法版)

    Golang實(shí)現(xiàn)拓?fù)渑判?DFS算法版)

    這篇文章主要介紹了Golang實(shí)現(xiàn)拓?fù)渑判?DFS算法版),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • 深入了解Go語言中g(shù)oioc框架的使用

    深入了解Go語言中g(shù)oioc框架的使用

    goioc?是一個(gè)基于?GO?語言編寫的依賴注入框架,基于反射來進(jìn)行編寫。本文主要為大家介紹了goioc框架的原理與使用,需要的可以參考一下
    2022-11-11
  • Windows+Linux系統(tǒng)下Go語言環(huán)境安裝配置過程

    Windows+Linux系統(tǒng)下Go語言環(huán)境安裝配置過程

    Go 語言被設(shè)計(jì)成一門應(yīng)用于搭載 Web 服務(wù)器,存儲(chǔ)集群或類似用途的巨型中央服務(wù)器的系統(tǒng)編程語言。這篇文章主要介紹了Windows+Linux系統(tǒng)下Go語言環(huán)境搭建配置過程,針對(duì)每種系統(tǒng)給大家講解的非常詳細(xì),需要的朋友可以參考下
    2021-06-06
  • 一文帶你深入了解Golang中的參數(shù)傳遞機(jī)制

    一文帶你深入了解Golang中的參數(shù)傳遞機(jī)制

    值傳遞和引用傳遞是編程語言中兩種主要的參數(shù)傳遞方式,決定了函數(shù)調(diào)用過程中實(shí)參如何影響形參以及函數(shù)內(nèi)部對(duì)形參的修改是否會(huì)影響到原始實(shí)參,下面就跟隨小編一起深入了解下golang中參數(shù)傳遞機(jī)制吧
    2024-01-01
  • Golang實(shí)現(xiàn)http文件上傳小功能的案例

    Golang實(shí)現(xiàn)http文件上傳小功能的案例

    這篇文章主要介紹了Golang實(shí)現(xiàn)http文件上傳小功能的案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • Go語言中的并發(fā)goroutine底層原理

    Go語言中的并發(fā)goroutine底層原理

    這篇文章主要介紹了Go語言中的并發(fā)goroutine底層原理,介紹Go語言并發(fā)底層原理,以及對(duì)比Go語言并發(fā)與其他語言并發(fā)的優(yōu)劣,下文詳細(xì)內(nèi)容,需要的小伙伴可以參考一下
    2022-02-02
  • go語言使用中提示%!(NOVERB)的解決方案

    go語言使用中提示%!(NOVERB)的解決方案

    o語言的設(shè)計(jì)目標(biāo)是提供一種簡(jiǎn)單易用的編程語言,同時(shí)保持高效性和可擴(kuò)展性,它支持垃圾回收機(jī)制,具有強(qiáng)大的并發(fā)編程能力,可以輕松處理大規(guī)模的并發(fā)任務(wù),Go語言還擁有豐富的標(biāo)準(zhǔn)庫和活躍的開發(fā)社區(qū),使得開發(fā)者能夠快速構(gòu)建出高質(zhì)量的應(yīng)用程序,需要的朋友可以參考下
    2023-10-10
  • GO語言獲取系統(tǒng)環(huán)境變量的方法

    GO語言獲取系統(tǒng)環(huán)境變量的方法

    這篇文章主要介紹了GO語言獲取系統(tǒng)環(huán)境變量的方法,實(shí)例分析了Getenv方法操作環(huán)境變量的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02
  • Go語言建議多使用切片少使用數(shù)組原理探究

    Go語言建議多使用切片少使用數(shù)組原理探究

    這篇文章主要為大家介紹了Go語言建議多使用切片少使用數(shù)組原理探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • golang?字符串拼接方法對(duì)比分析

    golang?字符串拼接方法對(duì)比分析

    這篇文章主要為大家介紹了golang?字符串拼接方法對(duì)比分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09

最新評(píng)論