无缓冲与有缓冲通道
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. 选择使用场景
- 无缓冲通道用于严格同步
- 有缓冲通道适合异步处理,提高性能
理解缓冲特性,合理设计通道,提升并发程序效率。
相关内容
- 什么是 Go Go 是由 Google 开发的一种开源编程语言,以简洁、高效、并发编程支持强著称,广泛应用于后端开发、云原生和微服务等领域。
- Go 的特点与适用场景 Go 语言以高并发、快速编译、简洁语法和强大标准库著称,适用于构建高性能网络服务、微服务架构和云原生应用。
- 安装 Go(Windows/Linux/macOS) 本节介绍如何在 Windows、Linux 和 macOS 上安装 Go 语言开发环境,包含安装步骤、验证方法及常见注意事项。
- 设置环境变量 本节介绍如何为 Go 语言配置环境变量,包括 GOPATH、GOROOT、PATH 等关键变量,适用于 Windows、Linux 和 macOS 系统。
- 第一个 Go 程序(Hello World) 本节将带你编写第一个 Go 程序“Hello, World”,帮助你快速了解 Go 的基础语法和程序结构。
- Go Modules 简介 本节介绍 Go Modules 的基本概念与用法,它是 Go 官方推荐的依赖管理方式,支持版本控制、依赖隔离和构建一致性。