title: Go并发模型
tags:
- module
- go
- concurrency
- joplin
type: module
source_type: reconstructed
created: 2026-04-22
updated: 2026-04-22
---
Go并发模型
[!abstract]
这一模块处理 Go 最有辨识度的能力之一。重点不是只会写 go 关键字,而是理解 goroutine 和 channel 如何形成 Go 的并发组织方式。
模块结论
- [[Go并发]] 的核心不只是“多个任务一起跑”,而是语言级并发模型。
- goroutine 提供轻量级执行单元。
- channel 提供 goroutine 之间的数据传递与同步机制。
一、goroutine
- 使用
go 关键字启动。
- 比传统线程更轻量。
- 调度由 Go 运行时管理。
二、channel
- 用于 goroutine 之间传递数据。
- 既是通信工具,也是同步工具。
- 发送和接收都通过
<- 表达。
三、无缓冲与有缓冲通道
- 无缓冲通道更强调同步配合。
- 有缓冲通道允许一定程度异步。
- 但缓冲并不意味着不需要消费者。
四、关闭与遍历通道
close 用于声明不再继续发送。
range 可遍历通道直到关闭。
五、易错点
- goroutine 开多了不等于程序自然更高效。
- channel 不是简单队列,它还承载同步语义。
- 不关闭该关闭的通道,或错误关闭通道,都容易导致并发 bug。
六、复习提问
- goroutine 和传统线程相比,Go 想解决什么问题?
- 为什么 channel 同时是通信工具和同步工具?
- 无缓冲通道和有缓冲通道的主要差别是什么?
来源
- [[raw/Joplin/编程学习项目/Go学习笔记/Go基础语法/21.Go并发.md]]
相关页面