当前位置: 首页 > news >正文

Python 3.13 预览版尝鲜:NoGIL (自由线程) 真的来了!多核 CPU 终于不再围观

标签:#Python3.13 #NoGIL #多线程 #性能优化 #并发编程


🛑 前言:GIL 到底锁住了什么?

在 Python 3.13 之前,当你启动 4 个线程去跑计算任务时,操作系统确实看到了 4 个线程,但在 Python 虚拟机内部,它们必须抢锁
拿到 GIL 的线程才能跑,没拿到的只能干等。于是,原本应该并行的任务,变成了“快速切换的串行任务”。

GIL 与 NoGIL 的执行对比 (Mermaid):

✅ Python 3.13 (NoGIL)

独立执行

独立执行

独立执行

线程 A

CPU 核 1

线程 B

CPU 核 2

线程 C

CPU 核 3

真正的多核并行!

❌ 传统 Python (有锁)

抢锁 -> 执行 -> 释放

等待 -> 抢锁 -> 执行

等待 -> ...

线程 A

CPU

线程 B

线程 C

同一时刻只有 1 个线程在跑


🛠️ 一、 什么是“自由线程 (Free-Threading)”?

Python 3.13 引入了一个新的构建模式:Free-Threading
它通过移除 GIL,并引入更细粒度的锁(Mimalloc 内存分配器、偏向锁等技术),实现了真正的多线程并行。

你需要知道的 3 个事实:

  1. 它不是默认开启的:你下载的标准安装包依然有 GIL。你需要下载专门的free-threading版本或源码编译。
  2. 单线程略有变慢:去掉了 GIL,为了保证线程安全,Python 内部加了很多细碎的锁。这导致单线程运行速度比标准版慢了约 10%(未来会优化)。
  3. 多线程起飞:在多核 CPU 上,CPU 密集型任务的性能随核数线性增长。

🧪 二、 实战:编译安装 NoGIL 版本

目前主流的包管理器(如 apt, brew)还没完全跟进。作为极客,我们直接从源码编译。

1. 获取源码
# 下载 Python 3.13 源码 (请去官网找最新 Release 或 RC 版 tarball)wgethttps://www.python.org/ftp/python/3.13.0/Python-3.13.0b1.tgztar-xvf Python-3.13.0b1.tgzcdPython-3.13.0b1
2. 编译配置 (关键一步)

重点在于--disable-gil参数。

# 配置编译参数./configure --disable-gil --enable-optimizations# 编译并安装 (为了不污染环境,建议安装到特定目录或使用 altinstall)make-j8sudomakealtinstall
3. 验证是否成功

运行新编译的 Python,检查 GIL 状态。

# python3.13 (注意看启动 banner)importsysimportsysconfig# 检查是否开启了 free-threadingprint(sysconfig.get_config_var("Py_GIL_DISABLED"))# 输出: 1 表示成功!# 或者在 3.13 新增的 APIprint(sys._is_gil_enabled())# 输出: False 表示无锁!

🏎️ 三、 性能压测:真的变快了吗?

我们写一段经典的CPU 密集型代码(计算斐波那契数列),对比有锁版和无锁版。

测试脚本benchmark.py:

importthreadingimporttimeimportsysdeffib(n):ifn<=1:returnnreturnfib(n-1)+fib(n-2)defworker():# 计算第 35 位斐波那契数 (纯 CPU 计算)fib(35)defrun_threads(n_threads):start=time.time()threads=[]for_inrange(n_threads):t=threading.Thread(target=worker)t.start()threads.append(t)fortinthreads:t.join()end=time.time()print(f"线程数:{n_threads}, 耗时:{end-start:.2f}秒")if__name__=="__main__":# 检测当前环境gil_status="有锁(GIL)"ifsys._is_gil_enabled()else"无锁(NoGIL)"print(f"当前环境: Python{sys.version.split()[0]}- [{gil_status}]")# 跑 4 个线程run_threads(4)

测试结果对比 (假设 4 核 CPU):

  • 普通 Python 3.12 (有 GIL):

  • 4 个线程几乎是串行执行的。

  • 耗时:约 12.5 秒(单次耗时 x 4)。

  • CPU 占用:只有 1 个核是 100%,其他核围观。

  • Python 3.13 (NoGIL):

  • 4 个线程同时在 4 个核上跑。

  • 耗时:约 3.2 秒(接近单次耗时)。

  • CPU 占用:4 个核全部飙到 100%!

结论:性能提升了接近4 倍。这在以前的 Python 中是不敢想象的。


⚠️ 四、 避坑指南:生态还没准备好

虽然 NoGIL 很香,但现在千万别用于生产环境

  1. C 扩展库的噩梦
    Python 强大的生态(NumPy, Pandas, PyTorch)底层都是 C/C++。
    以前写 C 扩展时,开发者默认“有 GIL 保护”,不需要处理复杂的线程安全。
    现在 GIL 没了,这些库如果不重写底层锁逻辑,运行时会直接崩溃 (SegFault)
    注:NumPy 等头部库正在积极适配,但还需要时间。
  2. 单线程性能回退
    如果你只是写简单的脚本,不需要多核,用 NoGIL 版本反而会慢一点点。
  3. 内存占用增加
    为了实现无锁,解释器内部维护了更多的数据结构,内存消耗会有所上升。

🎯 总结

Python 3.13 的 NoGIL 是 Python 诞生 30 年来最大的底层变革。
它标志着 Python 终于要在多核计算领域摘掉“低能”的帽子了。

对于我们开发者来说:

  • Web 服务:以后可能不再需要Gunicorn开多个进程了,直接开多线程即可,内存更省。
  • AI/数据处理:纯 Python 写的并行算法将变得可行。

Next Step:
赶紧去编译一个 NoGIL 版本的 Python,把你的 CPU 跑满,截图发给你的 Java/Go 同事,告诉他们:“看,Python 的多线程也能把 CPU 烧出香味了!”

http://www.jsqmd.com/news/211175/

相关文章:

  • 救命神器2026 MBA必备!10个AI论文平台深度测评与推荐
  • springboot基于java的地方特色美食分享管理系统
  • 【课程5.2】功能设计:城管全域数据地图(坐标匹配、设施标注逻辑)
  • AI智慧司牧服务系统:打造草原上的“千里眼”与“数字牧羊人”
  • 最新实测9款AI论文生成器!查重率从82%骤降至5%,限时公开!
  • springboot基于java的隔离人员的管理系统设计与实现
  • 做OEM代工找不到靠谱工厂?这款工具帮你一键筛选源头工厂
  • LlamaIndex 高级 RAG:实现“递归检索”与“文档层级索引”,解决长文档问答的精度丢失问题
  • 三菱Q系列PLC之QD77MS16总线控制伺服项目实战分享
  • layui提交
  • 基于spark的西南天气数据的分析与应用
  • UltraShape 1.0: 高保真三维形状生成:基于可扩展几何优化
  • 大模型备案全攻略|AI从业者必看避坑指南
  • (167页PPT)制造业精益数字化转型解决方案(附下载方式)
  • 接口自动化测试框架详解(pytest+allure+aiohttp+ 用例自动生成)
  • (168页PPT)华为流程管理精要体系构建规划设计运营评估与持续改善(附下载方式)
  • 深度测评8个一键生成论文工具,本科生轻松搞定毕业论文!
  • Flutter 插件通信架构设计:从 Channel 到 FFI 的完整边界
  • 爆火!9款AI论文工具实测,20分钟生成6万字文献综述!
  • 基于元胞自动机的室内人员疏散基础模型
  • 深度解析智慧路灯大数据平台:物联网 + 大数据构建智慧城市感知底座
  • UE5 C++(11):
  • 基于拥挤距离的多目标粒子群优化算法(MO-PSO-CD)详解
  • 测试人员作品集的价值重构:超越简历的技术名片
  • BPSK调制仿真代码
  • 参会预告 | AtomGit 邀您共赴 TritonNext 2026 技术大会,解锁 AI 系统与编译生态新机遇
  • 飞凌嵌入式ElfBoard-打开目录readdir
  • 售价1499元起 华为MatePadSE搭载鸿蒙OS2亮相
  • 飞凌嵌入式ElfBoard-打开目录closedir
  • 华为:共建鸿蒙世界,鸿蒙生态向前再迈一步!