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 分析瓶颈。


本文为个人学习整理,欢迎交流讨论。

相关推荐
敲代码的小小酥2 分钟前
谈SpringMVC与Spring WebFlux的区别与适用场景
java·后端·spring
IT_陈寒2 分钟前
Redis开发实战:从入门到精通
前端·人工智能·后端
日日大王学编程5 分钟前
2026主流AI Agent产品分类、核心差异与技术特性全解析
人工智能·后端·python
mldong35 分钟前
同一个节点接力办几轮,流程才往下走:jeeflow 的后加签
后端·架构
量化分析码农38 分钟前
【Python量化多因子实战 03】多因子怎么合成?等权、IC 加权与回归加权实测
后端
深蓝AI9 小时前
JWT 不是登录方案:三种登录态架构怎么选
后端
starzy19909 小时前
深入理解Scala Map:从实现原理到工程实践
开发语言·后端·scala
卷无止境10 小时前
凌晨三点的绿灯
后端
excel11 小时前
基于 GPT 的自动发布文章接口方案:从一句话或一张图片生成并发布内容
前端·javascript·后端
风若飞13 小时前
Spring Ai 入门遇到问题1
java·后端·spring