文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
Buffered Channels
上面介绍了默认的非缓存类型的 channel,不过 Go 也允许指定 channel 的缓冲大小,很简单,就是 channel 可以存储多少元素。 ch:= make(chan bool
, 4),创建了可以存储 4 个元素的 bool 型 channel。在这个 channel 中,前 4 个元素可以无阻塞的写入。当写入第 5 个元素时,代码将会阻塞,直到其他 goroutine 从 channel 中读取一些元素,腾出空间。
ch := make(chan type, value)
当 value = 0
时,channel 是无缓冲阻塞读写的,当 value > 0
时,channel 有缓冲、是非阻塞的,直到写满 value 个元素才阻塞写入。
看一下下面这个例子,可以在自己本机测试一下,修改相应的 value 值
package main
import "fmt"
func main() {
c := make(chan int, 2)//修改 2 为 1 就报错,修改 2 为 3 可以正常运行
c <- 1
c <- 2
fmt.Println(<-c)
fmt.Println(<-c)
}
//修改为 1 报如下的错误:
//fatal error: all goroutines are asleep - deadlock!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论