0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Python新提案:使全局解释器锁成为可选项

OSC开源社区 来源:OSC开源社区 2023-01-13 15:31 次阅读

去年的 2022 Python 语言峰会上,开发者 Sam Gross 带来了新提案:删除全局解释器锁 GIL,解放多线程性能。但由于 GIL 历史悠久,许多官方 / 非官方的 Python 包和模块都深度融合了 GIL 模块,彻底移除 GIL 功能可能会对生态造成影响。在 2023 年 1 月 9 日, Sam Gross 又创建了另一个 Python 提案 PEP 703:使全局解释器锁成为构建 Python 的可选项。

f52bcf44-9299-11ed-bfe3-dac502259ad0.png

CPython 的全局解释器锁(“GIL”)防止多个线程同时执行 Python 代码,GIL 是 Python 有效使用多核 CPU 的障碍。

向 CPython 添加一个构建配置 ( --without-gil) ,使其可在没有全局解释器锁的情况下运行 Python 代码,并进行必要的更改,以使解释器线程安全。

这条 PEP 提案的内容可谓是论文级别。提案中先阐述了 GIL 对 Python 并发的性能阻碍,随后详细分析了抽离 GIL 需要对 Python 内部进行哪些改动:

移除全局解释器锁需要对 CPython 内部进行大量更改,但对公共 Python 和 C API 的更改相对较少。

实施的变更大约分为以下四类:

引用计数、内存管理、容器线程安全、锁和 atomic API

由于该提案内容实在太多,感兴趣的朋友请在 PEP 703 详情页(https://peps.python.org/pep-0703)和 Cpython 核心开发者对该提案的讨论帖(https://discuss.python.org/t/pep-703-making-the-global-interpreter-lock-optional/22606/10)中细阅。

目前此 PEP 已经有了参考实现,它的原型源于当初为了移除 GIL 而开发的 nogil 项目,该原型对单线程代码带来较明显 (~10%) 性能提升。

如果该提案通过,意味着默认情况下 CPython 不会删除或关闭 GIL,也不会让用户有选择地启用 / 删除 GIL。因为--without-gil是一个编译时标志,可以在从源代码构建 Python 解释器时进行设置。但如果弃用该配置,会导致对解释器的构建和运行方式的深度侵入性更改,PEP 中也对此进行了详细介绍。

对用户侧来说,该改动意味着如果用户使用任何带有编译扩展的包,将需要获取或构建一个专门针对 Python 解释器的(不同的)ABI 编译的版本,该版本在没有 GIL 的情况下编译。

关于 Python GIL

由于 CPython 的内存管理非线程安全,因此设计了 CPython 的 GIL (Global Interpreter Lock - 全局解释器锁),以防止竞争条件并确保线程安全。GIL 是一个互斥锁,只允许一个线程持有 Python 解释器的控制权,从而保护对 Python 对象的访问,防止多个线程同时执行 Python 字节码。

但事后看来,GIL 并不理想,因为它阻止了多线程的 CPython 程序充分利用多核处理器的性能。

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • python
    +关注

    关注

    55

    文章

    4778

    浏览量

    84439
  • 解释器
    +关注

    关注

    0

    文章

    103

    浏览量

    6493

原文标题:Python新提案:使全局解释器锁成为可选项

文章出处:【微信号:OSC开源社区,微信公众号:OSC开源社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    的基本输出时序

    在深入探讨的输出时序时,我们需要详细分析在不同控制信号下的行为表现,特别是控制信号(如使能信号E)的电平变化如何影响数据输入(D
    的头像 发表于 08-30 10:43 428次阅读

    pytorch和python的关系是什么

    ,PyTorch已经成为了一个非常受欢迎的框架。本文将介绍PyTorch和Python之间的关系,以及它们在深度学习领域的应用。 Python简介 Python是一种高级、
    的头像 发表于 08-01 15:27 1650次阅读

    手机存储不够用,“软NAS”成为新的可选项

    无论是硬件级的NAS解决方案亦或是便捷的网盘服务,核心都是为了能够解决日益膨胀的个人数据存储需求,而鲁大师AiNAS这样的“软NAS”出现,为用户提供了多一种选择。同时对于云盘服务供应商来说,也有了新的竞争压力,靠“限速卖会员”躺着赚钱的时代,似乎已经过去了。
    的头像 发表于 07-17 11:36 336次阅读
    手机存储不够用,“软NAS”<b class='flag-5'>成为</b>新的<b class='flag-5'>可选项</b>

    鸿蒙开发接口安全:【@system.cipher (加密算法)】

    加密类型,可选项有: 1. encrypt 加密 2. decrypt 解密
    的头像 发表于 06-06 09:11 950次阅读
    鸿蒙开发接口安全:【@system.cipher (加密算法)】

    FPGA开发过程中配置全局时钟需要注意哪些问题

    的时钟源。外部时钟输入和内部时钟资源都是可选项,需要综合考虑它们的稳定性、精度和成本等因素。 时钟分配 :全局时钟资源需要有效地分配到各个逻辑单元。在分配时钟时,要注意避免时钟信号的交叉和干扰,以减少
    发表于 04-28 09:43

    Python运行环境有哪些

    Python是一种广泛使用的高级编程语言,它有许多种运行环境,可以适应不同的开发需求。下面将详细介绍Python的几种常见的运行环境。 CPython: CPython是Python的默认解释
    的头像 发表于 11-29 16:14 1905次阅读

    pycharm怎么配置python环境变量

    Python 解释全局配置适用于所有的项目,而项目级别配置仅适用于单个项目。我们将分别介绍这两种配置方式。 在配置 Python
    的头像 发表于 11-29 14:56 2737次阅读

    查看python安装路径的方法

    Python是一种高级编程语言,常用于开发Web应用、数据分析、人工智能等领域。在使用Python进行开发之前,我们需要先安装Python解释
    的头像 发表于 11-29 14:54 1.1w次阅读

    python自带的idle怎么进入

    Python自带的IDLE是一个集成开发环境(Integrated Development Environment),它通过提供编辑和交互式解释,使得
    的头像 发表于 11-29 14:51 2173次阅读

    python shell怎么用

    Python Shell是一种交互式解释,可以通过命令行直接运行Python代码。在Shell中,可以输入一行代码并立即得到结果,非常适合于测试、尝试新代码或进行简单的任务。本文将详
    的头像 发表于 11-29 14:36 1098次阅读

    python软件怎么运行代码

    Python是一种高级编程语言,它被广泛用于开发各种类型的应用程序,从简单的脚本到复杂的网络应用和机器学习模型。要运行Python代码,您需要一个Python解释
    的头像 发表于 11-28 16:02 854次阅读

    运行Python程序的几种常见方法

    方法: 使用Python解释 Python解释是运行Py
    的头像 发表于 11-28 15:32 2413次阅读

    如何运行Python程序

    运行Python程序非常简单。Python是一种解释型语言,这意味着可以直接通过解释来执行代码。下面我将详细介绍如何运行
    的头像 发表于 11-24 09:31 1147次阅读

    python代码写完后点哪个运行

    当你完成了编写Python代码后,你可以选择多种方式来运行它。下面是几种常见的运行代码的方式: Python解释Python是一种
    的头像 发表于 11-24 09:28 5156次阅读

    python怎么运行程序

    Python是一种广泛使用的编程语言,它的简易和可读性使得它成为初学者和专业开发人员的首选。在运行Python程序之前,您需要安装Python解释
    的头像 发表于 11-24 09:25 2488次阅读