我已将 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块上发送,直到缓冲区中有可用空间为止。

    10-06 13:17