第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

帶有 Ticker 的 Goroutine 選擇循環(huán)導(dǎo)致 CPU 達到 100%

帶有 Ticker 的 Goroutine 選擇循環(huán)導(dǎo)致 CPU 達到 100%

Go
開滿天機 2022-06-27 17:10:10
我有這個循環(huán),它的作用是嘗試反復(fù)輪詢另一臺服務(wù)器。我使用ticker來實現(xiàn)這一點,但是程序反復(fù)顯示100%的CPU使用率。這個代碼在一個 goroutine 中運行。HTTP 服務(wù)器在另一個 goroutine 中運行。func() Monitor() {  abort := make(chan bool)  log.Info("Monitor started.")  // start the monitor goroutine  go func() {      defer log.Info("Stopped monitor")              ticker := time.NewTicker(time.Duration(35.0) * time.Second)      defer ticker.Stop()              log.Info("Monitor started! \n")      for {        select {        case t := <-ticker.C:            log.Infof("Subscribe to service at time %v\n", t)            if err := selfConn.SubscribeToService(); err != nil {                log.Errorf("Failed to subscribe to primary connector: %v", err)            }         case <-abort:            log.Info("Finished routine!")            return        default:            continue        }        }    }()       go func() {        time.Sleep(10 * time.Minute)        abort <- true    }()}但是,當監(jiān)視器循環(huán)開始時,每次發(fā)送到股票通道的信號時,CPU 都會持續(xù)顯示 100%。在 goroutine 中使用 ticker 以使其不會消耗 100% CPU,我錯過了什么?
查看完整描述

1 回答

?
子衿沉夜

TA貢獻1828條經(jīng)驗 獲得超3個贊

你的循環(huán)中select有一個default分支。如果其他cases 都沒有準備好繼續(xù),default則立即執(zhí)行分支,因此您的下一次迭代立即開始而無需等待。這是一個繁忙的循環(huán)。


此外,不需要另一個 goroutine 終止,您可以在同一個 goroutine 中使用計時器。


例如:


func monitor() {

    log.Info("Monitor started.")


    ticker := time.NewTicker(35 * time.Second)

    defer ticker.Stop()


    timeoutCh := time.After(10 * time.Minute)

    for {

        select {

        case t := <-ticker.C:

            log.Infof("Subscribe to service at time %v\n", t)

            if err := selfConn.SubscribeToService(); err != nil {

                log.Errorf("Failed to subscribe to primary connector: %v", err)

            }

        case <-timeoutCh:

            log.Info("Finished routine!")

            return

        }

    }

}


查看完整回答
反對 回復(fù) 2022-06-27
  • 1 回答
  • 0 關(guān)注
  • 157 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號