Go并发模型.md 1.7 KB


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并发]]