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


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

相关推荐
AskHarries1 小时前
文件上传系统
后端
止语Lab2 小时前
好的 DX 不等于少写代码——三种语言的摩擦力设计课
后端
吃饱了得干活2 小时前
别再手动解析 LLM 输出了!LangChain 四种结构化输出方案对比
后端·python·langchain
程序员天天困2 小时前
Arthas trace 命令怎么用?一行定位最慢那行代码
jvm·后端
Huiturn2 小时前
GPT 5.6 连续编码 10 小时,纯 Python 啃下 Word 二进制格式——doc2docx 实现拆解
后端
用户298698530142 小时前
Python 实现 Excel 与 Markdown 互转的实用指南
后端·python·excel
用户77283104908402 小时前
krono-job:零侵入、单二进制交付的分布式任务调度平台(开源)
后端
Conan在掘金2 小时前
鸿蒙报错速查:Function lacks ending return statement,返回路径漏 return 就炸,根因 + 真解法
后端
人间凡尔赛3 小时前
AI-Native 云原生架构:2026 年从容器编排到智能体编排的范式革命
后端·云原生·架构
IT_陈寒3 小时前
Vue的响应式让我加班到凌晨3点,原来问题出在这
前端·人工智能·后端