通道缓冲
默认情况下,通道是 无缓冲 的,这意味着只有对应的接收(<- chan) 通道准备好接收时,才允许进行发送(chan <-)。
有缓冲通道 允许在没有对应接收者的情况下,缓存一定数量的值。
make 函数的第二个参数指定通道的容量。无缓冲通道的容量为零。这就是为什么如果没有接收器,发送是阻塞的,如果无缓冲通道没有发送器,接收是阻塞的。
a = make(chan , capacity)
由于此通道是有缓冲的, 因此我们可以将这些值发送到通道中,而无需并发的接收。
默认情况下,通道是 无缓冲 的,这意味着只有对应的接收(<- chan) 通道准备好接收时,才允许进行发送(chan <-)。
有缓冲通道 允许在没有对应接收者的情况下,缓存一定数量的值。
make 函数的第二个参数指定通道的容量。无缓冲通道的容量为零。这就是为什么如果没有接收器,发送是阻塞的,如果无缓冲通道没有发送器,接收是阻塞的。
a = make(chan , capacity)
由于此通道是有缓冲的, 因此我们可以将这些值发送到通道中,而无需并发的接收。
package main
import (
"fmt"
)
func main() {
msg := make(chan string, 2)
msg <- "buffered"
msg <- "channel"
fmt.Println(<-msg)
fmt.Println(<-msg)
}
buffered
channel