”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 如何在 Go 中同时选择缓冲发送和无缓冲接收通道?

如何在 Go 中同时选择缓冲发送和无缓冲接收通道?

发布于2024-11-06
浏览:562

How to Select on a Buffered Send and Unbuffered Receive Channel Simultaneously in Go?

同时选择 Go 发送和接收通道

在 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