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

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)資料,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

不得不說(shuō),golang的sdk做了太多的東西,定時(shí)器在golang里實(shí)現(xiàn)起來(lái)非常的簡(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è)過(guò)期時(shí)間的通道(Channel)也就是代碼里的 <-ticker.C 這句意思就是時(shí)間一到,ticker會(huì)通過(guò)管道發(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文件里定義的,也就是說(shuō)NewTimer()相當(dāng)于一個(gè)睡眠(延時(shí)執(zhí)行)。時(shí)間一到,timer會(huì)通過(guò)管道發(fā)出一個(gè)信號(hào)告訴CPU該執(zhí)行定時(shí)里的代碼了,然后這個(gè)管道就銷(xiāo)毀了,除非使用 timer.Reset(time.Duration * 2) 來(lái)重新激活這根管道,讓它重置定時(shí)的剩余時(shí)間,到下一輪定信號(hào)發(fā)出后,還要再次重置

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

值得一提的是,當(dāng)定時(shí)任務(wù)執(zhí)行時(shí)間過(guò)長(zhǎng)且超過(guò)定時(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ǔ)言中nil判斷的注意事項(xiàng)(最新推薦)

    Go語(yǔ)言中nil判斷的注意事項(xiàng)(最新推薦)

    本文給大家介紹Go語(yǔ)言中nil判斷的注意事項(xiàng),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2025-06-06
  • golang讀取各種配置文件(ini、json、yaml)

    golang讀取各種配置文件(ini、json、yaml)

    日常項(xiàng)目中,讀取各種配置文件是避免不了的,本文主要介紹了golang讀取各種配置文件(ini、json、yaml),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • Go語(yǔ)言開(kāi)發(fā)發(fā)送Get和Post請(qǐng)求的示例

    Go語(yǔ)言開(kāi)發(fā)發(fā)送Get和Post請(qǐng)求的示例

    這篇文章主要介紹了Go語(yǔ)言開(kāi)發(fā)發(fā)送Get和Post請(qǐng)求的示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • golang 生成二維碼海報(bào)的實(shí)現(xiàn)代碼

    golang 生成二維碼海報(bào)的實(shí)現(xiàn)代碼

    這篇文章主要介紹了golang 生成二維碼海報(bào)的實(shí)現(xiàn)代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • Go語(yǔ)言dolphinscheduler任務(wù)調(diào)度處理

    Go語(yǔ)言dolphinscheduler任務(wù)調(diào)度處理

    這篇文章主要為大家介紹了Go語(yǔ)言dolphinscheduler任務(wù)調(diào)度處理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Golang日志庫(kù)logrus的介紹與使用示例代碼

    Golang日志庫(kù)logrus的介紹與使用示例代碼

    Logrus是Go語(yǔ)言的一個(gè)功能豐富的日志庫(kù),支持結(jié)構(gòu)化日志和多級(jí)別日志記錄,它兼容標(biāo)準(zhǔn)log庫(kù),并可通過(guò)自定義Hooks和Formatter進(jìn)行高度定制化,支持集成如syslog等系統(tǒng),便于管理和分析,Logrus還支持自定義日志顏色和格式,以及根據(jù)日志級(jí)別進(jìn)行不同處理,如panic和exit
    2024-10-10
  • jenkins構(gòu)建go及java項(xiàng)目的方法

    jenkins構(gòu)建go及java項(xiàng)目的方法

    這篇文章主要介紹了jenkins構(gòu)建go及java項(xiàng)目,本文通過(guò)圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值了,需要的朋友可以參考下
    2021-04-04
  • 詳解Go語(yǔ)言中for循環(huán),break和continue的使用

    詳解Go語(yǔ)言中for循環(huán),break和continue的使用

    這篇文章主要通過(guò)一些示例為大家介紹一下Go語(yǔ)言中for循環(huán)、break和continue的基本語(yǔ)法以及使用,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-06-06
  • golang copy函數(shù)使用的坑

    golang copy函數(shù)使用的坑

    本文主要介紹了golang copy函數(shù)使用的坑,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • 如何使用?Go?獲取你的?IP?地址(推薦)

    如何使用?Go?獲取你的?IP?地址(推薦)

    在Go語(yǔ)言中,獲取IP地址分為公共IP和私有IP兩種方式,公共IP地址通過(guò)外部API獲取,本文給大家介紹如何使用?Go?獲取你的?IP?地址,感興趣的朋友跟隨小編一起看看吧
    2024-09-09

最新評(píng)論

东阳市| 哈巴河县| 图们市| 绥芬河市| 屏南县| 聂荣县| 榆树市| 庆云县| 阳城县| 定陶县| 乌拉特前旗| 莱西市| 新泰市| 巴楚县| 丰县| 察雅县| 凤山县| 旺苍县| 卓资县| 阳山县| 涞源县| 大邑县| 平罗县| 文登市| 山阳县| 都安| 鹰潭市| 寻甸| 藁城市| 兰考县| 乃东县| 石嘴山市| 平罗县| 连南| 富川| 深泽县| 鄂尔多斯市| 乐昌市| 昌乐县| 固安县| 沙湾县|