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
    +关注

    关注

    51

    文章

    4678

    浏览量

    83476
  • 解释器
    +关注

    关注

    0

    文章

    98

    浏览量

    6423

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

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

收藏 人收藏

    评论

    相关推荐

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

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

    pycharm怎么配置python环境变量

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

    python shell怎么用

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

    如何运行Python程序

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

    python代码写完后点哪个运行

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

    Python自带的命令窗口

    Python自带的命令窗口,也称为Python交互式解释器,是Python编程语言的一个重要工具,它允许用户在命令行界面中输入和执行Python
    的头像 发表于 11-22 14:02 431次阅读

    pycharm中python interpreter怎么设置

    Interpreter"(项目解释器)一栏,点击该选项。 在右侧的窗口中,你将看到已安装的Python解释器列表。如果你还没有安装Python
    的头像 发表于 11-22 11:08 1131次阅读

    Microchip推出具有灵活许可选项的 MPLAB® XC-DSC 编译器, 进一步扩展开发生态系统

    这款新编译器专为 dsPIC® 数字信号控制器 ( DSC )优化设计,可为实时应用定制许可选项   随着工业和自动驾驶汽车市场快速发展,人们对软件工具的需求与日俱增,这些工具能够更快、更高效地进行
    发表于 11-17 17:19 506次阅读

    Python SDK包的使用

    之前,你要确保Python和pip已经成功安装在电脑上,如果没有,可以访问这篇文章: 超详细Python安装指南 进行安装。 (可选1) 如果你用Python的目的是数据分析,可以直接
    的头像 发表于 10-30 15:51 428次阅读
    <b class='flag-5'>Python</b> SDK包的使用

    Yapf:一个格式化 Python 代码的好帮手

    格式化为符合 PEP8 代码指南的格式,还能格式化为符合 Google 代码指南的格式,可选项更多,让你的代码更加漂亮。 1.准备 开始之前,你要确保Python和pip已经成功安装在电脑上,如果没有
    的头像 发表于 10-17 11:08 422次阅读
    Yapf:一个格式化 <b class='flag-5'>Python</b> 代码的好帮手

    鼎阳科技为工程师提供从70MHz到4GHz带宽的12-bit示波器可选项

    更真实、波形测量更精准的优点而广受好评,此次两款产品的发布,进一步加强了鼎阳科技高带宽高分辨率示波器在业界的领先地位,为工程师提供了从70MHz到4GHz带宽的12-bit示波器可选项。   12-bit
    的头像 发表于 09-27 09:57 562次阅读

    如何在DS-5 Dtsl选项对话框1.0版中创建ETR配置选项

    1. 概览 学习如何使用简单的 Python 脚本在 DS-5 开发工作室 DTSL 选项对话框中创建和定制一个嵌入跟踪路由(ETR) 标签。 DTSL 选项对话框中的控件
    发表于 08-28 06:47

    为什么IAR的Debugger选项中没有JLINK可选

    如题,为什么我的IAR for msp 7.12.1的Debugger选项只有FET和simulator仿真,没有JLINK选项,已经重新下载过了,还是不行,上网找也没人出现我这种情况的,有没有老哥
    发表于 08-05 06:02

    Go能取代Python成为开发者的首选语言吗?

    过去的很多年,Python是人工智能和数据科学领域最受欢迎的编程语言。5G时代来临后,Python有点「力不从心」......Python是一个解释性语言,这导致它执行起来比较慢,与其
    发表于 08-03 10:11 306次阅读
    Go能取代<b class='flag-5'>Python</b><b class='flag-5'>成为</b>开发者的首选语言吗?

    编译草图python选项错误怎么处理?

    到 influxdb,但无法编译和上传任何草图。我不断收到 python 选项错误。在 python 上执行 man 之后,我可以确认错误“-I”不是一个选项。看起来正确的
    发表于 06-02 06:37