--- 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]] ## 相关页面 - [[Go]] - [[Go并发]]