通道就緒的非同步通訊
在 Go 中,通道促進了 goroutine 之間的並發通訊。當處理緩衝發送通道和無緩衝接收通道時,可以同時選擇兩個通道以優化通訊流。本文探討了在最小化 CPU 使用率的同時實現此功能的方法。
要了解此問題,請考慮以下上下文:
s := make(chan問題是是否可以在兩個通道上進行選擇,以便在資料可供讀取時選擇r,而在資料可供讀取時選擇s通道未滿。
解決方案
可以使用具有預設情況的 select 語句來實現此目的。由於使用 select 時僅評估一次要傳送的值,因此如果兩個頻道都未準備好,則該值將變得過時。為了避免這種情況,在選擇語句中加入了預設情況,如果兩個通道都沒有準備好,則執行該預設情況。在這種預設情況下,程式會休眠一小段時間,讓通道準備就緒,然後使用更新的值重試。
s := make(chan警告
使用len(r) 或cap(s) 檢查通道準備情況,然後發送/接收,不建議這樣做,因為通道可能會在以下時間之間變更其狀態檢查並嘗試傳送/接收。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3