斯里达(Sridhar):
从有效出发
接收器始终阻塞,直到有数据要接收为止。如果通道未缓冲,则发送方将阻塞,直到接收方收到该值为止。
但是signal.Notify将信号中继到无缓冲通道而不会阻塞。这是如何工作的,是否可以与其他chan <-类型一起使用?
阿德里安:
它说os.Notify
不会被阻止的意思是,如果被阻止,则消息将被丢弃。因此,虽然它确实不会阻塞,但如果不能立即接收到信号,它将中继信号也不是正确的。这是通过简单的完成的select
:
select {
case channel <- message:
// message sent
default:
// message dropped
}
这就是为什么文档中Notify
明确指出应使用缓冲通道的原因。还要注意,缓冲通道也可以阻塞,而不仅仅是非缓冲通道。仅当缓冲区已满时,缓冲的通道才会阻塞。
select
包括在行程和规格中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
编辑于
我来说两句