无缓冲与有缓冲通道

1. 通道简介

通道(Channel)用于 Goroutine 之间传递数据,实现同步和通信。

2. 无缓冲通道

无缓冲通道没有缓冲区,发送操作会阻塞,直到有 Goroutine 接收。

ch := make(chan int)  // 无缓冲通道

go func() {
    ch <- 42  // 发送阻塞,等待接收
}()

fmt.Println(<-ch)  // 接收后发送解除阻塞

`

3. 有缓冲通道

有缓冲通道带有缓冲区,发送操作在缓冲区未满时不会阻塞。

ch := make(chan int, 2)  // 有缓冲通道,容量为2

ch <- 1  // 立即发送,不阻塞
ch <- 2  // 立即发送,不阻塞

fmt.Println(<-ch)  // 输出1
fmt.Println(<-ch)  // 输出2

4. 选择使用场景

  • 无缓冲通道用于严格同步
  • 有缓冲通道适合异步处理,提高性能

理解缓冲特性,合理设计通道,提升并发程序效率。