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

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

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

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

先來看看下面這段代碼:

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í)間。

我們來看看這個(gè)

x := <- timer.C

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

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

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

C chan <- Time

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

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ā)才回收。 如果需要考慮效率,請改用 NewTimer 并在不再需要計(jì)時(shí)器時(shí)調(diào)用 Timer.Stop來結(jié)束。

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

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

剛才固定時(shí)長定時(shí)器的就是一個(gè)定時(shí)炸彈設(shè)置為三秒鐘那三秒鐘之后就爆炸,現(xiàn)在我們看看周期性時(shí)長定時(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)無法讀出數(shù)據(jù),
            //一定要讀會(huì)導(dǎo)致死鎖.
            ticker.Stop()
            break
        }
    }
    fmt.Println("計(jì)時(shí)結(jié)束")
}

這段代碼的意思是,設(shè)置一個(gè)周期性時(shí)長定時(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í)長定時(shí)器和周期性時(shí)長定時(shí)器的文章就介紹到這了,更多相關(guān)Go 定時(shí)器 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺析Go語言中內(nèi)存泄漏的原因與解決方法

    淺析Go語言中內(nèi)存泄漏的原因與解決方法

    這篇文章主要來和大家聊一聊Go語言中內(nèi)存泄漏的那些事,例如內(nèi)存泄漏的原因與解決方法,文中的示例代碼講解詳細(xì),需要的小伙伴可以參考下
    2024-02-02
  • Go基礎(chǔ)教程系列之回調(diào)函數(shù)和閉包詳解

    Go基礎(chǔ)教程系列之回調(diào)函數(shù)和閉包詳解

    這篇文章主要介紹了Go基礎(chǔ)教程系列之回調(diào)函數(shù)和閉包詳解,需要的朋友可以參考下
    2022-04-04
  • go語言通過反射創(chuàng)建結(jié)構(gòu)體、賦值、并調(diào)用對應(yīng)的操作

    go語言通過反射創(chuàng)建結(jié)構(gòu)體、賦值、并調(diào)用對應(yīng)的操作

    這篇文章主要介紹了go語言通過反射創(chuàng)建結(jié)構(gòu)體、賦值、并調(diào)用對應(yīng)的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • Go 1.22中的for循環(huán)新特性詳解

    Go 1.22中的for循環(huán)新特性詳解

    在 Go 語言中,for 循環(huán)是實(shí)現(xiàn)迭代的主要方式,Go 中的 for 循環(huán)非常靈活,有多種使用方式,本文將給大家詳細(xì)的介紹一下Go 1.22中的for循環(huán)新特性,感興趣的朋友可以參考下
    2024-02-02
  • go語言通過結(jié)構(gòu)體生成json示例解析

    go語言通過結(jié)構(gòu)體生成json示例解析

    這篇文章主要為大家介紹了go語言通過結(jié)構(gòu)體生成json示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04
  • Go語言里切片slice的用法介紹

    Go語言里切片slice的用法介紹

    這篇文章介紹了Go語言里切片slice的用法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Go語言指針用法詳解

    Go語言指針用法詳解

    Go指針和C指針在許多方面非常相似,但其中也有一些不同。本文詳細(xì)講解了Go語言指針的用法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • golang多維度排序及題解最長連續(xù)序列

    golang多維度排序及題解最長連續(xù)序列

    這篇文章主要為大家介紹了golang多維度排序及題解最長連續(xù)序列示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • 重學(xué)Go語言之如何使用Redis

    重學(xué)Go語言之如何使用Redis

    Redis是我們開發(fā)應(yīng)用程序中很常用的NoSQL數(shù)據(jù)庫,那么在Go語言中要如何連接和操作Redis呢,在這篇文章中,我們就來一起來探究一下吧
    2023-08-08
  • 淺析Go語言中包的介紹與初始化

    淺析Go語言中包的介紹與初始化

    這篇文章主要為大家詳細(xì)介紹了Go語言中包的介紹與初始化,從而搞清Go程序的執(zhí)行次序,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解下
    2023-10-10

最新評論