主题
无缓冲与有缓冲通道
1. 通道简介
通道(Channel)用于 Goroutine 之间传递数据,实现同步和通信。
2. 无缓冲通道
无缓冲通道没有缓冲区,发送操作会阻塞,直到有 Goroutine 接收。
go
ch := make(chan int) // 无缓冲通道
go func() {
ch <- 42 // 发送阻塞,等待接收
}()
fmt.Println(<-ch) // 接收后发送解除阻塞
3. 有缓冲通道
有缓冲通道带有缓冲区,发送操作在缓冲区未满时不会阻塞。
go
ch := make(chan int, 2) // 有缓冲通道,容量为2
ch <- 1 // 立即发送,不阻塞
ch <- 2 // 立即发送,不阻塞
fmt.Println(<-ch) // 输出1
fmt.Println(<-ch) // 输出2
4. 选择使用场景
- 无缓冲通道用于严格同步
- 有缓冲通道适合异步处理,提高性能
理解缓冲特性,合理设计通道,提升并发程序效率。