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

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

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

不得不說,golang的sdk做了太多的東西,定時器在golang里實現(xià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)
 // 清理計時器
 defer ticker.Stop()
 for {
  fmt.Println("ticker start ", time.Now().Format("15:04:05"))
  foo()
  <-ticker.C
 }
}

運行結(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)
 // 清理計時器
 defer timer.Stop()
 for {
  fmt.Println("ticker start ", time.Now().Format("15:04:05"))
  foo()
  <-timer.C
 }
}

運行結(jié)果

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

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

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

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

值得一提的是,當定時任務執(zhí)行時間過長且超過定時的間隔時間時,定時的間隔時間到了之后會等待定時任務執(zhí)行完才會進行下一輪的定時任務

總結(jié)

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

相關(guān)文章

  • Go語言中nil判斷的注意事項(最新推薦)

    Go語言中nil判斷的注意事項(最新推薦)

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

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

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

    Go語言開發(fā)發(fā)送Get和Post請求的示例

    這篇文章主要介紹了Go語言開發(fā)發(fā)送Get和Post請求的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • golang 生成二維碼海報的實現(xiàn)代碼

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

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

    Go語言dolphinscheduler任務調(diào)度處理

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

    Golang日志庫logrus的介紹與使用示例代碼

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

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

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

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

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

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

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

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

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

最新評論

宁安市| 凤山县| 东乡县| 全椒县| 水富县| 德昌县| 青田县| 宁强县| 宝兴县| 兴城市| 于都县| 乌什县| 桐城市| 平阳县| 韶山市| 桦甸市| 颍上县| 新昌县| 陇川县| 镇坪县| 库车县| 闽侯县| 肇州县| 朝阳县| 慈溪市| 凉城县| 平度市| 建湖县| 阿巴嘎旗| 东台市| 正蓝旗| 无棣县| 滁州市| 邯郸县| 湄潭县| 平南县| 崇仁县| 嘉黎县| 政和县| 军事| 芜湖县|