返回介绍

Buffered Channels

发布于 2024-10-12 12:35:56 字数 771 浏览 0 评论 0 收藏 0

上面介绍了默认的非缓存类型的 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文