我已将 channel 缓冲区大小设置为零,例如var intChannelZero = make(chan int)
,当从intChannelZero
获取值时将被阻塞,直到intChannelZero
具有值为止。
另外,我将 channel 缓冲区的大小设置为var intChannelOne = make(chan int, 1)
之类的值,例如intChannelOne
,当从intChannelOne
获取值时将被阻塞,直到intChannelZero
具有值为止。
我们知道intChannelOne
的容量为零,intChannelZero
的容量为1,所以我想知道:
intChannelZero <- 1
之类的intChannelZero
时,将值保存在哪里? intChannelOne
和ojit_code之间的差异。 谁可以在Golang运行时环境级别上解释它?非常感谢。
最佳答案
如果 channel 是无缓冲的(容量为零),则只有在发送方和接收方都准备就绪时,通信才能成功。
如果 channel 已缓冲(容量> = 1),则在 channel 不满的情况下发送成功而不阻塞,而在缓冲区不为空的情况下接收成功而不会阻塞。
该值从发送方复制到接收方。该值不会保存在实现可能使用的任何临时变量以外的任何地方。
在intChannelZero块上发送,直到接收器准备好为止。
在intChannelOne块上发送,直到缓冲区中有可用空间为止。