Golang中通道缓冲容量0和1之间的差异

Shu*_*lan 4 go

我将通道缓冲区的大小设置为零,例如var intChannelZero = make(chan int),从中获取值时intChannelZero将被阻塞,直到intChannelZero具有值为止。

另外,var intChannelOne = make(chan int, 1)当从中获取值时,将通道缓冲区的大小设置为1,例如,intChannelOne将被阻塞,直到intChannelOne具有值为止。

我们知道容量intChannelZero为零,容量intChannelOne为一,所以我想知道:

  • 将值放入intChannelZerolike时intChannelZero <- 1,将值保存在哪里?
  • 两者之间的差异intChannelZero以及intChannelOne何时赋予它们价值。

谁可以在Golang运行时环境级别解释它?非常感谢。

Cer*_*món 7

如果通道是无缓冲的(容量为零),则仅在发送方和接收方都准备就绪时通信才能成功。

如果通道已缓冲(容量> = 1),则在通道不满的情况下发送成功而不阻塞,而在缓冲区不为空的情况下接收成功而不会阻塞。

当像intChannelZero <-1一样将值放入intChannelZero时,将值保存在哪里?

该值从发送方复制到接收方。该值不会保存在实现可以使用的任何临时变量以外的任何地方。

给它们添加值时,intChannelZero和intChannelOne之间的差异。

在intChannelZero块上发送,直到接收器准备就绪。

在intChannelOne块上发送,直到缓冲区中有可用空间为止。