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


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

相关推荐
65岁退休Coder10 分钟前
LangChain v1.3.4 笔记 - 07 补充:链式调用 LCEL
后端·python·langchain
卷无止境21 分钟前
FastAPI 部署在 Nginx 后面到底该怎么配
后端·python
码流怪侠23 分钟前
用 WiFi 信号数人头:howmanypeoplearearound 项目深度解析
后端·开源·github
心运软件1 小时前
SpringBoot+ Vue校园社团管理平台的完整架构设计
vue.js·后端
Jodie同志1 小时前
第16~23天:持久化、HITL、流式、MCP与安全
前端·后端·agent
Jodie同志1 小时前
第1~15天:原生Agent、RAG与LangGraph基础(完整代码实操)
前端·后端·agent
Zane19942 小时前
单例线程安全、生产者消费者、死锁:并发面试三连问串讲
java·后端
用户69371750013842 小时前
#DeepSeek+Pi‑Agent 王炸组合跑赢 Claude‑Code!
前端·人工智能·后端
Zane19942 小时前
类变量与实例变量:一个共享列表引发的线上事故
后端·python
Scene2162 小时前
AgentScope 2.0:2. 快速上手 从零构建生产级智能体
后端