在 Go 中,可以使用 select 語句在通道上執行非阻塞 I/O 操作。然而,在處理緩衝發送通道(chan
常見的方法是在發送或接收之前檢查通道的長度或容量。然而,這是不可靠的,因為通道的狀態可以在檢查和後續操作之間發生變化:
if len(r) > 0 {
// Optionally execute other code
r 解決方案:帶有時間延遲的預設情況
要解決此問題,您可以使用具有短時間延遲的預設情況的 select 語句。這可以防止過多的 CPU 使用,同時允許您在兩個通道都未準備好時重試操作:
s := make(chan透過新增預設情況,如果兩個通道都沒有準備好,程式只會阻塞一小段時間,從而允許在等待通道可用時釋放CPU資源。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3