一尘不染

通道缓冲区大小是多少?

go

我正在尝试创建一个异步通道,并且一直在查看http://golang.org/ref/spec#Making_slices_maps_and_channels

c := make(chan int, 10)         // channel with a buffer size of 10

缓冲区大小为10是什么意思?缓冲区大小具体代表/限制了什么?


阅读 295

收藏
2020-07-02

共1个答案

一尘不染

缓冲区大小是在没有发送阻塞的情况下可以发送到通道的元素数。默认情况下,通道的缓冲区大小为0(可通过来获得此值make(chan int))。这意味着每个发送都会阻塞,直到另一个goroutine从通道接收到为止。缓冲区大小为1的通道可以容纳1个元素,直到发送块为止,因此您将获得

c := make(chan int, 1)
c <- 1 // doesn't block
c <- 2 // blocks until another goroutine receives from the channel
2020-07-02