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


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

相关推荐
码事漫谈8 小时前
勿删
后端
IT_陈寒12 小时前
用了Proxy才发现以前的JavaScript白写了
前端·人工智能·后端
唐青枫13 小时前
别把 ArrayList 当成会自动管理内存的 List:Zig 动态数组从入门到实战
后端
鸿蒙开发13 小时前
我为 HarmonyOS 做了一个统一大模型 SDK:@hmkit/ai 正式开源
后端
猪是念来过倒13 小时前
Semaphore 与 RateLimiter:并发控制双雄详解
后端
掘金者阿豪13 小时前
异构数据同步最怕什么?不是同步慢,而是数据对不上
后端
程序员cxuan14 小时前
Claude 官方的学习教程,太强了。
人工智能·后端·程序员
老孙讲技术14 小时前
把工地遮挡和掉线接进项目部:setMessageCallback 订 alarm 与 deviceStatus
后端·物联网·音视频开发
老孙讲技术14 小时前
关店后有人进门,监控值班群却没响:用 setMessageCallback 订 human,再用 aiHuman 打开人形
后端·物联网·音视频开发
LEE14 小时前
原来 Claude Code 最厉害的工具,一行代码都不写
前端·后端