Skip to content

Go vs Python 对比

GMP vs asyncio、GIL vs 无 GIL、适用场景选型。

Updated View as Markdown
For humans

Go vs Python 对比

呼应你的 Python 栈:两个语言在并发模型上是两种思路的极致。面试主线:调度模型差异、GIL 差异、怎么选。

并发模型:GMP vs asyncio

Go 多线程并行, Python 单线程并发

维度 Go(GMP) Python(asyncio)
载体 多内核线程(M) 单线程事件循环
并行 多核真并行(CPU 密集受益) 单核并发(IO 密集受益)
切换 用户态调度(P 管理) 协作式 yield
阻塞调用 系统调用让出 M,其他 G 照跑 阻塞整个事件循环
并发规模 十万级 十万级

关键差异:Go 的 goroutine 可以跑 CPU 密集任务(多核并行);Python 协程跑 CPU 密集无加速(GIL + 单线程)。Go 的阻塞系统调用不阻塞其他 goroutine(M 让出 P),Python 的同步阻塞会卡死整个循环。

GIL vs 无 GIL

Go Python(CPython)
GIL 无(内存模型靠原子操作 + 同步原语) 有(解释器全局锁,见 GIL 篇)
多线程 CPU 真并行 串行
并发工具 goroutine + channel 原生 threading/多进程/asyncio 三套

面试话术:Go 从设计上就没有 GIL,并发是语言一等公民;Python 的 GIL 是历史包袱(引用计数),靠多进程和协程绕。这就是“Go 适合高并发服务”的根本原因。

生态与适用场景

场景 选谁 原因
高并发 API/网关 Go 原生并发 + 低内存 + 高吞吐
云原生/基础设施 Go K8s/Docker 生态,静态二进制
数据处理/AI Python numpy/pandas/ML 生态碾压
快速原型 Python 开发速度最快
脚本/自动化 Python 胶水语言
微服务 都行 Go 性能好,Python 开发快(团队定)

组合架构(加分答案):Python 做数据/算法层,Go 做服务/网关层,Python 算完通过 RPC/消息队列喂给 Go 服务。各用所长。

性能对比基准

  • Go 的 HTTP 吞吐通常是 Python(同步框架)的 5-20 倍(asyncio 拉近但仍有差距)
  • 内存:Go 静态类型 + 值类型,常驻内存远小于 Python(对象头 + 解释器)
  • 启动:Go 毫秒级,Python 秒级
  • 编译期检查:Go 类型错误编译期暴露,Python 运行时才炸

面试追问

  1. GMP 和 asyncio 的本质区别? Go 多线程真并行(CPU 密集受益),Python 单线程事件循环(IO 密集)。调度器在 Go 是运行时,在 Python 是 asyncio 库
  2. Go 为什么没有 GIL? 设计时就把并发当一等公民:无共享解释器状态,靠同步原语。Python 的 GIL 是引用计数线程安全的简单解
  3. CPU 密集任务选谁? Go(多核并行)。Python 要 multiprocessing 或 C 扩展
  4. 阻塞调用的影响? Go 的系统调用让出 M 不影响其他 G;Python 的同步阻塞卡死事件循环(要 to_thread)
  5. 项目里怎么组合? Go 服务层 + Python 数据层,RPC/MQ 连接。各用所长
Navigation

Type to search…

↑↓ navigate↵ selectEsc close