Go goroutine
goroutine 是 Go 的轻量并发执行单元,用极低启动成本支持大量并发任务,但不等于自动安全或自动有序。
#type / concept
#status / growing
#tech / dev
#resource / go
[!info] related notes
- 所属 MOC: Go 并发 MOC
- 前置概念: Go 函数
- 并列概念: Go channel, Go context
Go goroutine
一句话定义
goroutine 是 Go 运行时管理的轻量并发执行单元,允许你用很低的成本启动大量并发任务。
核心机制 / 工作原理
启动一个 goroutine 很简单:
go doWork()
但真正要理解的是它背后的语义:
go关键字会让函数异步执行- 调用方不会等待它自然完成
- goroutine 由 Go 运行时调度,不直接等同于一个操作系统线程
这让 Go 很适合 I/O 密集型并发服务,但也意味着:
- 任务生命周期必须有人管理
- 并发共享数据必须认真同步
- “能并发跑起来”不等于“结果就正确”
最小例子 / 最小场景
go func() {
fmt.Println("background task")
}()
这行代码真正的重点不是语法,而是心智:
- 你创建了一个新的并发执行路径
- 主流程和它之间需要明确通信或等待方式
最值得先形成的认知
- goroutine 更像任务,而不是“开线程”
- 启动容易,收尾更重要
- 并发问题通常出在退出、取消、共享状态和错误传播
边界与易混淆点
- goroutine 不是并行的同义词,具体是否并行执行取决于运行时和环境
- goroutine 之间默认不会自动同步
- 忘记回收或退出的 goroutine 会形成泄漏