首页 > 解决方案 > golang中通道缓冲容量0和1的区别

问题描述

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

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

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

谁能在 Golang Runtime Enviroment 层面解释一下?非常感谢。

标签: go

解决方案


如果通道没有缓冲(容量为零),则只有在发送方和接收方都准备好时,通信才会成功。

如果通道被缓冲(容量> = 1),则如果通道未满,则发送成功而不会阻塞,如果缓冲区不为空,则接收成功而不会阻塞。

当将值放入 intChannelZero 时,例如 intChannelZero <- 1,该值将保存在哪里?

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

给 intChannelZero 和 intChannelOne 赋值时的区别。

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

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


推荐阅读