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


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

相关推荐
techdashen3 小时前
深入理解 Rust Futures:从零开始,一头扎到底
开发语言·后端·rust
AskHarries3 小时前
为什么不要一开始做平台
后端
IT_陈寒3 小时前
Redis缓存雪崩,原来我一直在用错误的方式设置过期时间
前端·人工智能·后端
qq_2518364573 小时前
基于Spring Boot的数据标注与质检系统设计与实现
java·spring boot·后端
總鑽風3 小时前
Spring AI实战:快速集成阿里通义千问
java·后端·spring·ai编程
Shuai.Super20213 小时前
对于 Spring Boot 项目 使用Hibernate
spring boot·后端·hibernate
砍材农夫3 小时前
物联网实战:Spring Boot + Netty 搭建 MQTT平台 | 多协议适配与模块化设计
java·spring boot·后端·物联网·spring
Mr.45673 小时前
Netty中实现设备消息串行处理:Semaphore + 线程池
java·后端
copyer_xyf4 小时前
FastAPI 核心语法
后端·python