From 有效的行动 https://golang.org/doc/effective_go.html#channels
接收器总是阻塞,直到有数据要接收。如果通道未缓冲,则发送方会阻塞,直到接收方收到该值。
But 信号.通知 https://golang.org/pkg/os/signal/#Notify将信号中继到无缓冲的通道而不阻塞。这是如何工作的以及是否可以与其他 chan
它说的是什么意思os.Notify
不会阻塞,如果阻塞,消息将被丢弃。因此,虽然它确实不会阻塞,但如果不能立即接收到信号,它就不会中继信号。这是通过简单完成的select
:
select {
case channel <- message:
// message sent
default:
// message dropped
}
这就是为什么文档Notify
明确指出您应该使用缓冲通道。另请注意,缓冲通道也可能会阻塞,而不仅仅是无缓冲通道;缓冲通道仅在缓冲区已满时才会阻塞。
select
被覆盖在the tour https://tour.golang.org/concurrency/5 and the spec https://golang.org/ref/spec#Select_statements.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)