news 2026/6/10 17:44:20

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/6/9 21:22:41

如何用Chaos Engineering提升韧性

为什么软件测试从业者需要关注Chaos Engineering&#xff1f;在数字化转型的浪潮中&#xff0c;软件系统的复杂性日益增加&#xff0c;意外故障可能导致灾难性后果——从服务中断到数据丢失。作为软件测试从业者&#xff0c;您传统的职责是发现和修复bug&#xff0c;但在云原生…

作者头像 李华
网站建设 2026/6/10 13:17:54

CSV 10GB 怎么处理?我用“分块 + 流式写入”把电脑救活(只推关键计算,不把内存当垃圾桶)

10GB CSV 最大的坑不是“文件大”,而是: 你一旦 pd.read_csv() 全量读进来,内存会被 DataFrame 的列对象、字符串、索引、dtype 推到爆。 解决思路也不复杂:永远不要把 10GB 当成一个 DataFrame 来处理,而是当成一个“数据流”。 1)先上结论:正确的处理姿势是“流水线”…

作者头像 李华
网站建设 2026/6/10 13:19:41

从你提供的内容来看,这个问题似乎是 Git 仓库配置问题。让我分析可能的原因:## 主要问题表现:1. **明显的错误消息**:`Unable to correct to a reposito

从你提供的内容来看&#xff0c;这个问题似乎是 Git 仓库配置问题。让我分析可能的原因&#xff1a;## 主要问题表现&#xff1a;1. **明显的错误消息**&#xff1a;Unable to correct to a repository at URL 2. **大量的重复字符串**&#xff1a;KEYNAMEINKEYNAMEINKEYNAMEIN…

作者头像 李华
网站建设 2026/6/10 12:43:04

基于java的畅销图书推荐系统

3 系统分析 3.1可行性分析 在开发一个新的软件之前&#xff0c;必须要进行一个系统的可行性研究&#xff0c;以最大限度地利用这个问题。以下我们将从系统&#xff0c;技术&#xff0c;操作、运营、法律等方面来决定该体系的发展[4]。 3.1.1系统可行性分析 利用计算机支持高效率…

作者头像 李华
网站建设 2026/6/10 14:19:30

报表工具选型深度解析系列之一:润乾报表

在众多报表工具中&#xff0c;首选润乾报表作为系列开篇&#xff0c;原因在于其独特的行业地位——当年凭借“非线性报表模型” 率先攻克中国式复杂报表难题的老牌本土工具。对于许多在早期信息化建设中深受复杂表样折磨的开发团队而言&#xff0c;润乾报表的出现具有里程碑意义…

作者头像 李华