GIL 锁或将在 CPython 中成为可选项

这篇具有很好参考价值的文章主要介绍了GIL 锁或将在 CPython 中成为可选项。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

哈喽大家好,我是咸鱼

几天前有媒体报道称,经过多次辩论,Python 指导委员会打算批准通过 PEP 703 提案,让 GIL(全局解释器)锁在 CPython 中成为一个可选项

PEP 703 提案主要目标是使 GIL 变成可选项,即允许 Python 解释器在特定情况下不使用GIL

GIL 锁或将在 CPython 中成为可选项

这将允许 Python 在多核处理器上更好地利用并行性,从而提高多线程程序的性能

PEP 703 提案建议新增一个配置项 --disable-gil ,加了这个选项之后就可以关闭 GIL 锁,如果想要开启 GIL 锁,把 --disable-gil 去掉即可
GIL 锁或将在 CPython 中成为可选项
关于 PEP 703 提案的具体内容有兴趣的小伙伴们可以去看一下

PEP 703 提案:https://peps.python.org/pep-0703/

接下来我们来看下外媒的这篇报道吧!

原文:https://www.infoworld.com/article/3704248/python-moves-to-remove-the-gil-and-boost-concurrency.html

译文如下:

经过多次辩论,Python 指导委员会打算批准 PEP 703 提案——”使全局解释器锁在 CPython 中可选“

PEP 703 提案是多年来尝试移除 Python GIL 锁的最终结果。GIL 锁的移除消除了多线程的主要障碍,使得 Python 成为真正的多核语言,并且显著提高其并行工作负载的性能

有了 PEP 703 提案,Python 中对多线程和并发的一流支持离成为现实又近了一步

为什么要移除 GIL ?

在 python 中,其内存管理系统通过维护每个对象的引用数量来跟踪对象的使用情况(Python 的引用计数机制)

当对象的引用计数减少为 0 时,系统就会删除该对象

由于 Python 诞生于多处理器系统很少见且多核处理器还未出现的时代,所以这种引用计数机制不是线程安全的

相反,Python 通过一次只允许一个线程访问对象来实现线程安全,这便是 GIL 的目的

这些年来许多项目都尝试移除 GIL,它们确实能够使多线程程序运行地更快,但代价是降低了单线程程序的性能

鉴于绝大多数 Python 应用程序都是单线程,所以这是一个糟糕的权衡。尽管对 GIL 的改进提升了 Pyhton 对多线程应用程序的处理,但仍旧是一个严重的瓶颈

Python 的核心开发人员最终决定从 CPython 中移除 GIL,但前提是它可以在不减慢单线程程序速度的情况下完成

没了 GIL,Python 该如何运行?

当前关于 Python 的无 GIL 版本的提案都提到了使用多种技术来使引用计数线程安全,并且维持单线程程序的速度不变或者仅对其产生最小的影响

下面是一些关于无 GIL 版本的提案:

  • Biased reference counting(带偏见的引用计数)

单个线程访问的对象的引用计数与多个线程访问的对象的引用计数处理方式不同(单线程的更快一点)

由于大多数对象只被一个线程访问,因此对单线程程序的影响被降到最低

  • Immortalization(永生)

某些对象(如 None)永远不会被回收,因此不需要跟踪它们的引用计数

  • Thread-safe memory allocation(线程安全的内存分配)

一个新的 CPython 对象内存分配系统将使垃圾收集器中的对象跟踪更容易,并以线程安全的方式分配内存

  • Deferred reference counting(延迟引用计数)

某些对象(如模块中的顶级函数)的引用计数可以安全地延迟。这样可以节省时间和资源

  • A revised garbage collector(修改后的垃圾收集器)

CPyhton 垃圾收集器清楚循环对象的引用(比如两个或多个对象互相引用)

无 GIL构建对垃圾收集器做了许多更改,例如删除用于跟踪对象的“生成”系统

如何逐步引入无 GIL 的 Python?

实施 PEP 703 是一个长期项目,将会在几年内分成多个阶段进行。在此期间,CPython 解释器先过渡到使 no-GIL 版本可选,然后是支持,最后成为标准

为了实现这个目标,CPython 的开发者将会为 CPython 添加一个实验性的 ’no-GIL‘ 构建模式,以便大家可以在有或没有 GIL 的情况下编译 CPython 的版本

最终,no-GIL 构建将成为默认值

下面则是相关的计划:

1、no-GIL 是可选项

对于 CPython 开发人员和 Python 社区来说,no-GIL CPython 的第一个版本将是实验性

这个实验阶段有几个目标:

  • 首先让 Python 社区的其他成员参与进来。对 Python 的任何重大更改都需要更广泛的Python 社区的支持。实验性版本为 Python 用户提供了一种安全地试验测试其代码的方法,并且能够观察非线程和线程代码的行为方式
  • 其次让 Python 发行版可以选择(而不是”要求“)提供 no-GIL 的 Python。像 Conda 或WinPython 这样的 Python 发行版需要保证与原有的 CPython 兼容。在过渡阶段,安装的时候可以提供常规或者 no-GIL 版本的 CPython 选项,这将允许 Conda 或WinPython 用户选择最适合他们需求的版本
  • 最后确定 no-GIL 项目是否值得。如果社区大规模尝试 no-GIL 的构建后对结果不满意,CPython 核心开发人员保留退出的权利。双重构建意味着在短期内会增加维护负担,但如果 no-GIL 项目被证明不值得,他们也有退路

2、支持 no-GIL Python

下一阶段将提供 no-GIL 构建作为 CPython 支持的替代构建

用户可以选择安装 no-GIL 或 GIL 版本,其中任何一个版本都是正式支持的 CPython 版本,可以接收错误修复、安全补丁和更新

这个阶段的一大目标是设置一个期限,使 no-GIL 成为默认值

这可能与其他 Python 功能的弃用和删除在同一时间线上发生——至少两三个版本,也意味着至少两到三年

3、no-GIL 成为默认

最后阶段是将 CPython 的 no-GIL 版本作为默认版本,并从 CPython 中删除所有与 GIL 相关的代码

”我们不想等待太久“,CPython 核心开发人员 Thomas Wouters 写道,“因为拥有两种通用的构建模式可能会给社区带来沉重的负担(例如,它可以将测试资源和调试场景加倍),但我们也不能急于求成。我们认为可能需要长达五年的时间才能达到这个阶段

移除 GIL 的最大挑战

尽管技术挑战令人生畏,但这项计划的最大挑战不仅仅是技术挑战。更大的问题是如何使 Python 生态系统的其余部分与这些变化保持一致且确保 no-GIL 的 Python 不会产生比它解决的问题更多的问题

根据 Wouters 的说法,”...适应非 GIL 构建所需的第三方代码的任何更改都应该只适用于 GIL 构建(尽管仍然需要解决与旧 Python 版本的向后兼容性问题)“

如上所述,另一个重大挑战是”带领Python社区的其他成员,” Wouters 说,“……确保我们想要做出的改变,以及我们希望他们做出的改变,是可以接受的

“在我们承诺完全切换到 no-GIL 构建之前,我们需要看到社区对它的支持,” Wouters说。“我们不能只是改变默认值,然后期望社区找出他们需要做些什么来支持它”

Python 社区在从 Python 2 过渡到 Python 3 的过程中经历了巨大的成长痛苦,因此任何像移除 GIL 这样的重大更改都必须完全向后兼容

正如 Wouters 所说,“我们不希望再出现 Python 3 的情况。”

不过在危险和挑战之外,还有一个巨大的回报——Python 最终支持了程序员在 21 世纪所期望的并行性文章来源地址https://www.toymoban.com/news/detail-637952.html

到了这里,关于GIL 锁或将在 CPython 中成为可选项的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python——GIL锁详解

    1、GIL锁不是python的特点。而是cpython的特点。 2、在cpython解释器中,GIL是一把互斥锁,用来保证进程中同一个时刻只有一个线程在执行。 3、在没有GIL锁的情况下,有可能多线程在执行一个代码的同时,垃圾回收机制对所执行代码的变量直接进行回收,其他的线程再使用该变量

    2024年02月12日
    浏览(34)
  • NFT 游戏新模式遐想:让“永久性死亡”在加密游戏中成为现实

    准确点来讲,我的意思是, 在加密游戏中引入永久性死亡的概念,就像在现实生活中一样。 游戏中的永久性死亡将开启新的体验和游戏方式。 当你在玩 FPS 或 RPG 游戏时,你可能会在游戏中“死亡”。此外,你将拥有一定数量的生命,要么固定,要么无限。死亡的概念存在于

    2023年04月25日
    浏览(37)
  • Python面试:什么是GIL

    输出为: 4 0 LOAD_CONST 1 (1) 2 LOAD_FAST 0 (l) 4 LOAD_CONST 2 (0) 6 STORE_SUBSCR 8 LOAD_CONST 0 (None) 10 RETURN_VALUE “STORE_SUBSCR”,可见只有单节字码操作。 输出为: 2 0 LOAD_FAST 0 (l) 2 LOAD_CONST 1 (0) 4 DUP_TOP_TWO 6 BINARY_SUBSCR 8 LOAD_CONST 2 (1) 10 INPLACE_ADD 12 ROT_THREE 14 STORE_SUBSCR 16 LOAD_CONST 0 (None) 18 RETURN_VAL

    2024年02月11日
    浏览(28)
  • Python多线程与GIL锁

    python多线程 Python的多线程编程可以在单个进程内创建多个线程来同时执行多个任务,从而提高程序的效率和性能。Python的多线程实现依赖于操作系统的线程调度器,并且受到全局解释器锁(GIL)的限制,因此在某些情况下,多线程并不能真正实现并行执行。 上述代码创建了

    2023年04月09日
    浏览(29)
  • CPython, Pypy, MicroPython...还在傻傻分不清楚?

    哈喽大家好,我是咸鱼 当我们说 Python 时,通常指的是官方实现的 CPython 但还有很多比如 Pypy、Jython、MicroPython、Brython、RustPython 等 “python” 许多小伙伴看到这些带 “python” 的概念可能一头雾水,心想这跟我平时接触到的 python 有什么区别吗?这些到底是什么 那么今天这篇

    2024年02月12日
    浏览(38)
  • CC0模式如何在NFT市场中成为主流?探索CC0 NFT的市场反馈

    知识产权和版权是一个有着悠久而曲折历史的复杂现象。追溯到 18 世纪,版权法已经发展并以许多不同的方式在几乎同样多的法律管辖区得到应用。 随着 NFT 生态系统中的人们寻求一种既能避免混乱的版权问题,又能合法地赋予收藏者权力的方法,一些项目开始使用一种称为

    2024年02月01日
    浏览(57)
  • Python 潮流周刊#24:no-GIL 提案正式被采纳了!

    你好,我是猫哥。这里每周分享优质的 Python、AI 及通用技术内容,大部分为英文。标题取自其中两则分享,不代表全部内容都是该主题,特此声明。 微信 | 博客 | 邮件 | Github | Telegram | Twitter 本周刊的源文件归档在 Github 上,已收获 777 star 好评,如果你也喜欢本周刊,就请给

    2024年02月08日
    浏览(59)
  • Google 工程主管:AIGC 将在三年内终结编程!

    大家注意:因为微信最近又改了推送机制,经常有小伙伴说错过了之前被删的文章,比如前阵子冒着风险写的爬虫,再比如一些限时福利,错过了就是错过了。 所以建议大家加个星标,就能第一时间收到推送。👇 推荐阅读: 太震撼了! Pandas2.0来了! 大家好,我是了不起!

    2024年02月12日
    浏览(50)
  • Python黑魔法揭秘:装饰器、生成器、异步编程、GIL、描述符和元类

    Python中的某些特性被看作是“黑魔法”,原因在于它们的强大功能和复杂性。接下来,让我们深入探索这些特性。 装饰器是修改函数或类行为的强大工具,它提供了一种可读性强、代码重用的方式来增强或修改函数或类的行为。装饰器就像一个包裹原函数或类的外壳,能够在

    2024年02月14日
    浏览(46)
  • “AIGC+”将在经济社会各领域持续大放异彩

    Gartner 将生成性 Al 列为 2022 年 5大影响力技术之一。MIT 科技评论也将 Al 合成数据列为 2022 年十大突破性技术之一,甚至将生成性 AI(Generative Al)称为是 AI 领域过去十年最具前景的进展。未来,兼具大模型和多模态模型的 AIGC 模型有望成为新的技术平台。 AIGC 的价值在于营销

    2024年02月11日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包