Go 语言并发模型深度解析:GMP 与实战模式
·
Go 语言并发模型深度解析:GMP 与实战模式
一、Go 并发哲学
不要通过共享内存来通信,而应通过通信来共享内存。Go 通过 CSP 模型实现并发。
二、GMP 调度器
组件
- G(Goroutine):轻量级执行体,栈 2KB 动态增长
- M(Machine):OS 线程
- P(Processor):逻辑处理器,管理 G 队列
调度策略
每个 P 维护本地 G 队列,工作窃取机制让空闲 P 从其他 P 偷 G。
为什么快?
goroutine 创建仅 4KB(线程 1MB+),上下文切换仅 3 条指令。
三、并发模式
Pipeline 模式:通过 channel 连接多个处理阶段。
Fan-out/Fan-in:多个 goroutine 读取和合并 channel。
Select 多路复用:处理多 channel 和超时。
四、控制工具
sync.WaitGroup、sync.Mutex、sync.RWMutex、sync.Once、errgroup、semaphore。
五、常见陷阱
- goroutine 泄漏:channel 未关闭
- 并发写 map:需 sync.Map
- channel 死锁:无缓冲 channel 同步问题
- panic 传播:goroutine panic 崩溃整个程序
六、优化建议
合理设置 GOMAXPROCS,使用 sync.Pool 减少 GC,用 pprof 分析瓶颈。
本文为个人学习整理,欢迎交流讨论。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)