Go语言:同时选择缓冲和非缓冲通道
当前的任务是实现缓冲发送通道和非缓冲通道的同时选择无缓冲接收通道,无需不断消耗CPU资源。这种情况相当于阻塞,直到通道准备好发送而不传输任何数据。
为了解决这个问题,我们可以使用具有默认情况的 select 语句。当两个通道都没有准备好时,将触发默认情况,启动短暂的睡眠持续时间。这可以节省资源,同时仍然可以连续尝试发送和接收数据:
package main
import (
"fmt"
"time"
)
func valueToSend() int {
// Generate a value to send, calculated/acquired each attempt
return 0
}
func main() {
s := make(chan在发送或接收数据之前依赖信道长度或容量检查时必须小心谨慎。这种方法可能会导致意外行为,因为通道状态可能在检查和实际发送/接收操作之间发生变化。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3