最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解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.fzitv.net/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中Error的設(shè)計(jì)與實(shí)踐詳解

    Golang中Error的設(shè)計(jì)與實(shí)踐詳解

    這篇文章主要為大家詳細(xì)介紹了Golang中Error的設(shè)計(jì)以及是具體如何處理錯(cuò)誤的相關(guān)知識(shí),文中的示例代碼簡(jiǎn)潔易懂,需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-08-08
  • Go?http請(qǐng)求排隊(duì)處理實(shí)戰(zhàn)示例

    Go?http請(qǐng)求排隊(duì)處理實(shí)戰(zhàn)示例

    這篇文章主要為大家介紹了Go?http請(qǐng)求排隊(duì)處理實(shí)戰(zhàn)實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • Golang Gin框架實(shí)現(xiàn)多種數(shù)據(jù)格式返回結(jié)果詳解

    Golang Gin框架實(shí)現(xiàn)多種數(shù)據(jù)格式返回結(jié)果詳解

    這篇文章主要介紹了Golang Gin框架實(shí)現(xiàn)多種數(shù)據(jù)格式返回結(jié)果,我們都知道,一個(gè)完整的請(qǐng)求包含請(qǐng)求和處理請(qǐng)求以及結(jié)果返回三個(gè)步驟,在服務(wù)器端對(duì)請(qǐng)求處理完成以后,會(huì)將結(jié)果返回給客戶端,在gin框架中,支持返回多種請(qǐng)求數(shù)據(jù)格式,下面我們一起來看看
    2023-05-05
  • Go語(yǔ)言基礎(chǔ)語(yǔ)法和基本數(shù)據(jù)類型知識(shí)鞏固

    Go語(yǔ)言基礎(chǔ)語(yǔ)法和基本數(shù)據(jù)類型知識(shí)鞏固

    這篇文章主要為大家介紹了Go語(yǔ)言基礎(chǔ)語(yǔ)法和基本數(shù)據(jù)類型知識(shí)鞏固,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • golang下的GOPATH路徑問題及解決

    golang下的GOPATH路徑問題及解決

    為了方便,我一般使用task來管理項(xiàng)目的編譯等事項(xiàng),由于才入門go,所以碰到一個(gè)問題,以此篇為記,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Go語(yǔ)言使用字符串的幾個(gè)技巧分享

    Go語(yǔ)言使用字符串的幾個(gè)技巧分享

    這篇文章中小編將給出一些Go語(yǔ)言在處理字符串方面的技巧,對(duì)大家學(xué)習(xí)Go語(yǔ)言具有一定的參考借鑒價(jià)值,下面一起看看吧。
    2016-09-09
  • Golang通脈之map詳情

    Golang通脈之map詳情

    這篇文章主要介紹了Golang通脈之map,Go語(yǔ)言中提供的映射關(guān)系容器為map,其內(nèi)部使用散列表(hash)實(shí)現(xiàn),map 是一種無序的鍵值對(duì)的集合。map 最重要的一點(diǎn)是通過 key 來快速檢索數(shù)據(jù),key 類似于索引,指向數(shù)據(jù)的值 map 是一種集合,所以可以像迭代數(shù)組和切片那樣迭代它
    2021-10-10
  • Go語(yǔ)言中的定時(shí)器原理與實(shí)戰(zhàn)應(yīng)用

    Go語(yǔ)言中的定時(shí)器原理與實(shí)戰(zhàn)應(yīng)用

    在Go語(yǔ)言中,Timer和Ticker是處理定時(shí)任務(wù)的重要工具,Timer用于一次性事件,而Ticker則用于周期性事件,本文詳細(xì)介紹了這兩種定時(shí)器的創(chuàng)建、使用和停止方法,并通過實(shí)際案例展示了它們?cè)诒O(jiān)控日志、檢查系統(tǒng)狀態(tài)等方面的應(yīng)用
    2024-10-10
  • Go語(yǔ)言基礎(chǔ)學(xué)習(xí)之?dāng)?shù)組的使用詳解

    Go語(yǔ)言基礎(chǔ)學(xué)習(xí)之?dāng)?shù)組的使用詳解

    數(shù)組相必大家都很熟悉,各大語(yǔ)言也都有數(shù)組的身影。Go 語(yǔ)言也提供了數(shù)組類型的數(shù)據(jù)結(jié)構(gòu)。本文就來通過一些簡(jiǎn)單的示例帶大家了解一下Go語(yǔ)言中數(shù)組的使用,希望對(duì)大家有所幫助
    2022-12-12
  • golang字符串轉(zhuǎn)64位整數(shù)的示例代碼

    golang字符串轉(zhuǎn)64位整數(shù)的示例代碼

    這篇文章主要介紹了golang字符串轉(zhuǎn)64位整數(shù),在Go語(yǔ)言中,可以使用strconv包中的ParseInt函數(shù)將字符串轉(zhuǎn)換為64位整數(shù),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-09-09

最新評(píng)論

沅江市| 荃湾区| 东乌珠穆沁旗| 南和县| 陇西县| 海兴县| 新巴尔虎左旗| 荣昌县| 绥棱县| 上饶县| 上蔡县| 垣曲县| 克东县| 玛曲县| 米脂县| 株洲县| 讷河市| 丹凤县| 景洪市| 缙云县| 融水| 蒲江县| 清河县| 得荣县| 观塘区| 瑞丽市| 海林市| 佛坪县| 江源县| 杂多县| 吐鲁番市| 康保县| 瑞丽市| 当阳市| 宣武区| 南江县| 太仓市| 阿勒泰市| 泸州市| 涞水县| 嘉鱼县|