news 2026/3/20 18:33:32

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 烧出香味了!”

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/11 12:58:23

运营同事最爱:一键批量生成海报/水印/尺寸适配

运营需求的本质:同一套模板 + 多条数据 + 多平台尺寸 → 输出一堆一致、可追溯的素材包。 你要做的不是“脚本”,而是模板化流水线(Poster Pipeline)。 1)目标与边界:把需求拆成 4 个稳定模块 模板渲染:背景 + 文案 + 图片(logo/角标) + 二维码 水印系统:文字/图片水印…

作者头像 李华
网站建设 2026/3/16 19:29:52

(114页PPT)企业信息化成熟度评估指标(附下载方式)

篇幅所限&#xff0c;本文只提供部分资料内容&#xff0c;完整资料请看下面链接 https://download.csdn.net/download/2501_92808811/92458153 资料解读&#xff1a;企业信息化成熟度评估指标 详细资料请看本解读文章的最后内容 这份文件围绕企业信息化成熟度评估构建了一套…

作者头像 李华
网站建设 2026/3/19 13:27:51

layui提交

<input type"button" id"btnSave" value"确认保存" lay-submit class"layui-btn layui-btn-normal" lay-filter"Save" /><script type"text/javascript"> layui.use([index, set], function () {var …

作者头像 李华
网站建设 2026/3/20 4:03:40

基于spark的西南天气数据的分析与应用

收藏关注不迷路&#xff01;&#xff01; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff08;免费咨询指导选题&#xff09;&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;希望帮助更多…

作者头像 李华
网站建设 2026/3/18 1:05:42

【课程5.2】功能设计:城管全域数据地图(坐标匹配、设施标注逻辑)

严格基于指定文件&#xff08;《01智慧城市一网统管平台-系统总体架构及其功能要点》《03智慧城市一网统管平台-系统数据库表》《05智慧城市一网统管平台 数据中枢系统功能设计》《06行业应用系统功能设计-01城管住建.docx》《02数据库表设计命名规范及英文简称对照表》&#x…

作者头像 李华