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

Golang定時(shí)器的2種實(shí)現(xiàn)方法與區(qū)別

 更新時(shí)間:2021年02月26日 09:05:00   作者:朋也  
這篇文章主要給大家介紹了關(guān)于Golang定時(shí)器的2種實(shí)現(xiàn)方法與區(qū)別的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

不得不說,golang的sdk做了太多的東西,定時(shí)器在golang里實(shí)現(xiàn)起來非常的簡(jiǎn)單

兩種方式

  • NewTicker()
  • NewTimer()

代碼如下

NewTicker() 方式

func foo() {
 fmt.Println("foo() start.")
 time.Sleep(time.Second * 3)
 fmt.Println("foo() end.")
}

func TestTicker(t *testing.T) {
 ticker := time.NewTicker(time.Second * 2)
 // 清理計(jì)時(shí)器
 defer ticker.Stop()
 for {
  fmt.Println("ticker start ", time.Now().Format("15:04:05"))
  foo()
  <-ticker.C
 }
}

運(yùn)行結(jié)果

 

NewTimer() 方式

func foo() {
 fmt.Println("foo() start.")
 time.Sleep(time.Second * 3)
 fmt.Println("foo() end.")
}

func TestTimer(t *testing.T) {
 timer := time.NewTimer(time.Second * 2)
 // 清理計(jì)時(shí)器
 defer timer.Stop()
 for {
  fmt.Println("ticker start ", time.Now().Format("15:04:05"))
  foo()
  <-timer.C
 }
}

運(yùn)行結(jié)果

可以看到,就執(zhí)行了兩次就不動(dòng)了

原因:NewTicker() 啟動(dòng)后,會(huì)自己維護(hù)一個(gè)過期時(shí)間的通道(Channel)也就是代碼里的 <-ticker.C 這句意思就是時(shí)間一到,ticker會(huì)通過管道發(fā)出一個(gè)信號(hào)給CPU,告訴CPU時(shí)間到了,該執(zhí)行定時(shí)里的方法了,信號(hào)發(fā)出后,ticker會(huì)自動(dòng)的重置定時(shí)的剩余時(shí)間,然后再進(jìn)行下一輪的發(fā)送信號(hào)執(zhí)行方法

但NewTimer()看源碼會(huì)發(fā)現(xiàn),它在sleep.go文件里定義的,也就是說NewTimer()相當(dāng)于一個(gè)睡眠(延時(shí)執(zhí)行)。時(shí)間一到,timer會(huì)通過管道發(fā)出一個(gè)信號(hào)告訴CPU該執(zhí)行定時(shí)里的代碼了,然后這個(gè)管道就銷毀了,除非使用 timer.Reset(time.Duration * 2) 來重新激活這根管道,讓它重置定時(shí)的剩余時(shí)間,到下一輪定信號(hào)發(fā)出后,還要再次重置

所以在用定時(shí)時(shí),還是NewTicker()方便

值得一提的是,當(dāng)定時(shí)任務(wù)執(zhí)行時(shí)間過長(zhǎng)且超過定時(shí)的間隔時(shí)間時(shí),定時(shí)的間隔時(shí)間到了之后會(huì)等待定時(shí)任務(wù)執(zhí)行完才會(huì)進(jìn)行下一輪的定時(shí)任務(wù)

總結(jié)

到此這篇關(guān)于Golang定時(shí)器的2種實(shí)現(xiàn)方法與區(qū)別的文章就介紹到這了,更多相關(guān)Golang定時(shí)器實(shí)現(xiàn)與區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用Go語(yǔ)言編寫簡(jiǎn)潔代碼的最佳實(shí)踐

    使用Go語(yǔ)言編寫簡(jiǎn)潔代碼的最佳實(shí)踐

    簡(jiǎn)潔的代碼對(duì)于創(chuàng)建可維護(hù)、可閱讀和高效的軟件至關(guān)重要,Go 是一種強(qiáng)調(diào)簡(jiǎn)單和代碼整潔的語(yǔ)言,在本文中,我們將結(jié)合代碼示例,探討編寫簡(jiǎn)潔 Go 代碼的最佳實(shí)踐,需要的朋友可以參考下
    2023-09-09
  • GoLang之使用Context控制請(qǐng)求超時(shí)的實(shí)現(xiàn)

    GoLang之使用Context控制請(qǐng)求超時(shí)的實(shí)現(xiàn)

    這篇文章主要介紹了GoLang之使用Context控制請(qǐng)求超時(shí)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Go語(yǔ)言中關(guān)閉帶緩沖區(qū)的頻道實(shí)例分析

    Go語(yǔ)言中關(guān)閉帶緩沖區(qū)的頻道實(shí)例分析

    這篇文章主要介紹了Go語(yǔ)言中關(guān)閉帶緩沖區(qū)的頻道,實(shí)例分析了帶緩沖區(qū)頻道的原理與用法,以及關(guān)閉帶緩沖區(qū)頻道的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02
  • golang rate令牌桶源碼分析實(shí)現(xiàn)方式

    golang rate令牌桶源碼分析實(shí)現(xiàn)方式

    這篇文章主要介紹了golang rate令牌桶源碼分析實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 深入理解Go中的項(xiàng)目代碼布局

    深入理解Go中的項(xiàng)目代碼布局

    Go?語(yǔ)言的創(chuàng)世項(xiàng)目其實(shí)就是?Go?語(yǔ)言項(xiàng)目自身,是全世界第一個(gè)?Go?語(yǔ)言項(xiàng)目,本文主要來和大家詳細(xì)介紹一下Go中的項(xiàng)目代碼布局,需要的可以了解下
    2023-11-11
  • Golang學(xué)習(xí)筆記(二):類型、變量、常量

    Golang學(xué)習(xí)筆記(二):類型、變量、常量

    這篇文章主要介紹了Golang學(xué)習(xí)筆記(二):類型、變量、常量,本文講解了基本類型、保留字、變量、常量、枚舉、運(yùn)算符、指針、分組聲明等內(nèi)容,需要的朋友可以參考下
    2015-05-05
  • Go語(yǔ)言配置數(shù)據(jù)庫(kù)連接池的實(shí)現(xiàn)

    Go語(yǔ)言配置數(shù)據(jù)庫(kù)連接池的實(shí)現(xiàn)

    本文內(nèi)容我們將解釋連接池背后是如何工作的,并探索如何配置數(shù)據(jù)庫(kù)能改變或優(yōu)化其性能。文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • 使用自定義錯(cuò)誤碼攔截grpc內(nèi)部狀態(tài)碼問題

    使用自定義錯(cuò)誤碼攔截grpc內(nèi)部狀態(tài)碼問題

    這篇文章主要介紹了使用自定義錯(cuò)誤碼攔截grpc內(nèi)部狀態(tài)碼問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Golang使用cobra實(shí)現(xiàn)命令行程序的示例代碼

    Golang使用cobra實(shí)現(xiàn)命令行程序的示例代碼

    Cobra 是 Go 語(yǔ)言中一個(gè)強(qiáng)大的命令行應(yīng)用庫(kù),它提供了創(chuàng)建命令行工具所需的基本結(jié)構(gòu)和功能,被許多開發(fā)者用于構(gòu)建各種命令行工具和應(yīng)用程序,本文將給大家介紹Golang使用cobra實(shí)現(xiàn)命令行程序,文中通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2024-02-02
  • golang字符串轉(zhuǎn)Time類型問題

    golang字符串轉(zhuǎn)Time類型問題

    本文主要介紹了golang字符串轉(zhuǎn)Time類型問題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04

最新評(píng)論