[Golang] 理解无缓冲和有缓冲通道
💡
原文英文,约400词,阅读约需2分钟。
📝
内容提要
Go语言中的通道有两种类型:无缓冲通道和有缓冲通道。无缓冲通道在发送和接收过程中是同步的,发送者和接收者都会被阻塞。有缓冲通道在发送过程中只有当缓冲区满时才会被阻塞,接收过程中只有当缓冲区为空时才会被阻塞。关闭通道后,发送到已关闭通道的操作会引发恐慌,接收已关闭通道的操作会返回通道类型的零值。Go语言还支持只接收和只发送的通道类型。
🎯
关键要点
- Go语言中的通道分为无缓冲通道和有缓冲通道。
- 无缓冲通道没有容量,发送和接收是同步的,发送者和接收者都会被阻塞。
- 有缓冲通道有固定容量,发送者在缓冲区满时被阻塞,接收者在缓冲区空时被阻塞,发送和接收是异步的。
- 关闭通道后,发送到已关闭通道会引发恐慌,接收已关闭通道会返回通道类型的零值。
- 可以通过接收第二个值来检查通道是否已关闭。
- 接收只通道只能用于接收值,发送只通道只能用于发送值,尝试发送或接收不允许的操作会导致编译错误。
🏷️
标签
➡️