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

Go的固定時(shí)長(zhǎng)定時(shí)器和周期性時(shí)長(zhǎng)定時(shí)器

 更新時(shí)間:2021年08月25日 11:52:01   作者:ReganYue  
本文主要介紹了Go的固定時(shí)長(zhǎng)定時(shí)器和周期性時(shí)長(zhǎng)定時(shí)器,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

我們之前要想在調(diào)度里面實(shí)現(xiàn)延時(shí)執(zhí)行,我們可以使用管道阻塞,直到有人往管道里面寫(xiě)東西才變通暢,還可以使用sleep來(lái)睡覺(jué),但是睡覺(jué)的過(guò)程,協(xié)程啥也干不了也占用資源。所以我們要用到接下來(lái)講的定時(shí)器,不會(huì)像sleep那樣睡的時(shí)候也占用資源。

先來(lái)看看下面這段代碼:

package main
​
import (
    "fmt"
    "time"
)
​
func main() {
    timer := time.NewTimer(3 * time.Second)
    fmt.Println("定時(shí)器創(chuàng)建完畢!")
    fmt.Println(time.Now())
    //阻塞3秒后才能讀出時(shí)間
    x := <- timer.C
    //這個(gè)C是一個(gè)單向的只讀管道
    fmt.Println(x)
}

運(yùn)行結(jié)果是這樣的:

定時(shí)器創(chuàng)建完畢!
2021-08-24 14:02:28.6664158 +0800 CST m=+0.012997601
2021-08-24 14:02:31.670071 +0800 CST m=+3.016652801

我們可以看到,運(yùn)行結(jié)果和我們要達(dá)到的目的基本一致,三秒的定時(shí)器創(chuàng)建完畢后,阻塞三秒后才能讀出時(shí)間。

我們來(lái)看看這個(gè)

x := <- timer.C

根據(jù)下面這段代碼可知,這個(gè)C是一個(gè)單向的只讀管道:

type Timer struct {
    C <-chan Time
    r runtimeTimer
}

如果要描述一個(gè)單向的只寫(xiě)的管道,應(yīng)該這樣寫(xiě):

C chan <- Time

但是如果要達(dá)到同樣的目的,我們可以使用下面這種更簡(jiǎn)單的方式:

func main() {
    fmt.Println(time.Now())
    x := <- time.After(3*time.Second)
    fmt.Println(x)
}

使用time.After()等待規(guī)定的一段時(shí)間,然后就在返回的管道上發(fā)送當(dāng)前時(shí)間。它相當(dāng)于 NewTimer(d).C。垃圾收集器不會(huì)回收底層的 Timer,直到計(jì)時(shí)器觸發(fā)才回收。 如果需要考慮效率,請(qǐng)改用 NewTimer 并在不再需要計(jì)時(shí)器時(shí)調(diào)用 Timer.Stop來(lái)結(jié)束。

當(dāng)然我們也可以使用下面這種方法,兩種方法都可以:

x := <- time.NewTimer(3 * time.Second).C

剛才固定時(shí)長(zhǎng)定時(shí)器的就是一個(gè)定時(shí)炸彈設(shè)置為三秒鐘那三秒鐘之后就爆炸,現(xiàn)在我們看看周期性時(shí)長(zhǎng)定時(shí)器吧!

func main() {
    ticker := time.NewTicker(1 * time.Second)
​
    var i int
    for{
        x := <- ticker.C
        fmt.Print("\r",x)
        i++
        if i>3{
            //停掉秒表會(huì)導(dǎo)致ticker.C永遠(yuǎn)無(wú)法讀出數(shù)據(jù),
            //一定要讀會(huì)導(dǎo)致死鎖.
            ticker.Stop()
            break
        }
    }
    fmt.Println("計(jì)時(shí)結(jié)束")
}

這段代碼的意思是,設(shè)置一個(gè)周期性時(shí)長(zhǎng)定時(shí)器,然后每一秒從管道內(nèi)讀一次數(shù)據(jù),然后輸出直到i>3,就使用ticker.Stop()將定時(shí)器結(jié)束,然后停止循環(huán),然后告訴你計(jì)時(shí)結(jié)束。

如果將定時(shí)器結(jié)束后,你仍然要堅(jiān)持讀,就會(huì)出現(xiàn)下面這種情況!

fatal error: all goroutines are asleep - deadlock!

出現(xiàn)死鎖!所以這里需要用到break.

到此這篇關(guān)于談?wù)凣o的固定時(shí)長(zhǎng)定時(shí)器和周期性時(shí)長(zhǎng)定時(shí)器的文章就介紹到這了,更多相關(guān)Go 定時(shí)器 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用go讀取gzip格式的壓縮包的操作

    使用go讀取gzip格式的壓縮包的操作

    這篇文章主要介紹了使用go讀取gzip格式的壓縮包的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • Go Gin框架中的binding驗(yàn)證器使用小結(jié)

    Go Gin框架中的binding驗(yàn)證器使用小結(jié)

    Gin框架中的binding驗(yàn)證器為我們提供了簡(jiǎn)便的數(shù)據(jù)綁定和驗(yàn)證功能,通過(guò)合理使用binding和validate標(biāo)簽,我們可以確保API接口的數(shù)據(jù)合法性和完整性,這篇文章主要介紹了Go Gin框架中的binding驗(yàn)證器使用指南,需要的朋友可以參考下
    2024-07-07
  • go高并發(fā)時(shí)append方法偶現(xiàn)錯(cuò)誤解決分析

    go高并發(fā)時(shí)append方法偶現(xiàn)錯(cuò)誤解決分析

    這篇文章主要為大家介紹了go高并發(fā)時(shí)append方法偶現(xiàn)錯(cuò)誤解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • 深入理解Go語(yǔ)言中的數(shù)組和切片

    深入理解Go語(yǔ)言中的數(shù)組和切片

    Go語(yǔ)言中的數(shù)組大概相當(dāng)與C/C++中的數(shù)組,固定大小,不能夠動(dòng)態(tài)擴(kuò)展大小,而切片大概相當(dāng)與C++中的Vector,可以動(dòng)態(tài)擴(kuò)展大小,當(dāng)大小超過(guò)容量時(shí),重新分配一塊內(nèi)存,然后將數(shù)據(jù)復(fù)制到新的內(nèi)存區(qū)域。下面我們通過(guò)幾個(gè)問(wèn)題來(lái)更好理解golang 的數(shù)組和切片,一起來(lái)看看吧。
    2016-09-09
  • Go 中閉包的底層原理

    Go 中閉包的底層原理

    這篇文章主要介紹了Go 中閉包的底層原理,閉包的基本原理是一種現(xiàn)象,一個(gè)函數(shù)內(nèi)引用了外部的局部變量的現(xiàn)象,帶著些許的了解和小編一起進(jìn)入文章正題學(xué)習(xí)
    2021-10-10
  • MacOS中 VSCode 安裝 GO 插件失敗問(wèn)題的快速解決方法

    MacOS中 VSCode 安裝 GO 插件失敗問(wèn)題的快速解決方法

    這篇文章主要介紹了MacOS中 VSCode 安裝 GO 插件失敗問(wèn)題的快速解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • 一文詳解Golang連接kafka的基本操作

    一文詳解Golang連接kafka的基本操作

    這篇文章主要為大家詳細(xì)介紹了Golang中連接kafka的基本操作的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-03-03
  • 基于golang中container/list包的用法說(shuō)明

    基于golang中container/list包的用法說(shuō)明

    這篇文章主要介紹了基于golang中container/list包的用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • go redis實(shí)現(xiàn)滑動(dòng)窗口限流的方式(redis版)

    go redis實(shí)現(xiàn)滑動(dòng)窗口限流的方式(redis版)

    這篇文章主要介紹了go redis實(shí)現(xiàn)滑動(dòng)窗口限流的方式(redis版),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Golang 類(lèi)型轉(zhuǎn)換的實(shí)現(xiàn)(斷言、強(qiáng)制、顯式類(lèi)型)

    Golang 類(lèi)型轉(zhuǎn)換的實(shí)現(xiàn)(斷言、強(qiáng)制、顯式類(lèi)型)

    將一個(gè)值從一種類(lèi)型轉(zhuǎn)換到另一種類(lèi)型,便發(fā)生了類(lèi)型轉(zhuǎn)換,在go可以分為斷言、強(qiáng)制、顯式類(lèi)型轉(zhuǎn)換,本文就詳細(xì)的介紹一下這就幾種轉(zhuǎn)換方式,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09

最新評(píng)論

中西区| 平山县| 浪卡子县| 都匀市| 涞源县| 肇源县| 清苑县| 东乡族自治县| 涞源县| 宁南县| 大理市| 仁怀市| 阳城县| 松阳县| 九台市| 岳普湖县| 永德县| 峨边| 通城县| 宁夏| 锡林浩特市| 禄丰县| 新乐市| 贵州省| 咸阳市| 武安市| 电白县| 德钦县| 麻阳| 齐齐哈尔市| 营山县| 庆阳市| 连城县| 尉氏县| 浠水县| 文山县| 广饶县| 丰镇市| 赤峰市| 承德县| 河东区|