婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Go的固定時長定時器和周期性時長定時器

Go的固定時長定時器和周期性時長定時器

熱門標簽:如何利用高德地圖標注家 400手機電話免費辦理 電腦外呼系統輻射大嗎 智能語音電銷的機器人 武漢百應人工智能電銷機器人 揚州電銷外呼系統軟件 上海企業外呼系統排名 百度地圖標注位置網站 開通400電話申請流程

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

先來看看下面這段代碼:

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

運行結果是這樣的:

定時器創建完畢!
2021-08-24 14:02:28.6664158 +0800 CST m=+0.012997601
2021-08-24 14:02:31.670071 +0800 CST m=+3.016652801

我們可以看到,運行結果和我們要達到的目的基本一致,三秒的定時器創建完畢后,阻塞三秒后才能讀出時間。

我們來看看這個

x := - timer.C

根據下面這段代碼可知,這個C是一個單向的只讀管道:

type Timer struct {
    C -chan Time
    r runtimeTimer
}

如果要描述一個單向的只寫的管道,應該這樣寫:

C chan - Time

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

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

使用time.After()等待規定的一段時間,然后就在返回的管道上發送當前時間。它相當于 NewTimer(d).C。垃圾收集器不會回收底層的 Timer,直到計時器觸發才回收。 如果需要考慮效率,請改用 NewTimer 并在不再需要計時器時調用 Timer.Stop來結束。

當然我們也可以使用下面這種方法,兩種方法都可以:

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

剛才固定時長定時器的就是一個定時炸彈設置為三秒鐘那三秒鐘之后就爆炸,現在我們看看周期性時長定時器吧!

func main() {
    ticker := time.NewTicker(1 * time.Second)
​
    var i int
    for{
        x := - ticker.C
        fmt.Print("\r",x)
        i++
        if i>3{
            //停掉秒表會導致ticker.C永遠無法讀出數據,
            //一定要讀會導致死鎖.
            ticker.Stop()
            break
        }
    }
    fmt.Println("計時結束")
}

這段代碼的意思是,設置一個周期性時長定時器,然后每一秒從管道內讀一次數據,然后輸出直到i>3,就使用ticker.Stop()將定時器結束,然后停止循環,然后告訴你計時結束。

如果將定時器結束后,你仍然要堅持讀,就會出現下面這種情況!

fatal error: all goroutines are asleep - deadlock!

出現死鎖!所以這里需要用到break.

到此這篇關于談談Go的固定時長定時器和周期性時長定時器的文章就介紹到這了,更多相關Go 定時器 內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Golang定時器的2種實現方法與區別
  • golang定時器和超時的使用詳解
  • Golang 定時器(Timer 和 Ticker),這篇文章就夠了
  • Golang中定時器的陷阱詳解
  • 用golang實現一個定時器任務隊列實例
  • golang中定時器cpu使用率高的現象詳析
  • Go定時器cron的使用詳解
  • Go語言中定時器cron的基本使用教程
  • golang time包下定時器的實現方法
  • Go語言實現定時器的方法

標簽:黑龍江 武漢 延邊 嘉峪關 張掖 宜賓 新余 江西

巨人網絡通訊聲明:本文標題《Go的固定時長定時器和周期性時長定時器》,本文關鍵詞  的,固定,時長,定時器,和,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Go的固定時長定時器和周期性時長定時器》相關的同類信息!
  • 本頁收集關于Go的固定時長定時器和周期性時長定時器的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 溧水县| 和顺县| 卢氏县| 广汉市| 府谷县| 西青区| 胶南市| 周宁县| 东光县| 淮滨县| 莱阳市| 山丹县| 苍梧县| 鄂托克前旗| 佛教| 岢岚县| 虞城县| 清流县| 如东县| 台中县| 四子王旗| 通榆县| 昆明市| 广宗县| 阜康市| 洪泽县| 二连浩特市| 呼伦贝尔市| 张家港市| 屏东县| 中牟县| 高邑县| 旌德县| 独山县| 于田县| 黔西| 星座| 色达县| 江达县| 莱阳市| 彩票|