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

    关注

    57

    文章

    4858

    浏览量

    89587
  • 解释器
    +关注

    关注

    0

    文章

    103

    浏览量

    6935

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    求助,关于全局中断使能的问题求解

    各位朋友大家好,我最近在使用蜂鸟的板子进行开发时,遇到了这样的问题:我的程序每次运行到使全局中断的时候,就像进入了死循环一样,出不去了,如上图,首先先打印“GI_EN begin!”这里是可以
    发表于 11-07 06:37

    请问这个芯片是被了吗?

    我使用gd32f303ze芯片,但是烧录不上,使用jlink查看了下地址,按照手册里的FMC可选项字节里查看地址的情况,好像确实是了,但是按里面的流程走完还是没解决问题,有人知道怎么回事吗?
    发表于 11-03 22:09

    ABB变频ACS510系列为什么要添加EMC滤波

    ACS510系列这种专为风机、水泵等平方转矩负载设计的经济型变频上,添加EMC滤波并非可选项,而是确保系统稳定、合规运行的必需措施。今天,我就从工程实践角度,详细科
    的头像 发表于 11-02 18:40 238次阅读
    ABB变频<b class='flag-5'>器</b>ACS510系列为什么要添加EMC滤波<b class='flag-5'>器</b>

    shell基本介绍及常用命令之shell基本介绍

    的shell命令Linux命令一般由三部分组成:Command [option] [parameter]。说明:1.[]部分中的内容是可选项;2.命令,选项,参数都以空格分隔;输入命令完毕后,按
    发表于 09-28 09:05

    施耐德电气如何助力生命科学与电子行业发展

    低碳转型的大势所趋下,先进制造业对于能源与运营效率的内生需求逐渐上升为行业发展的核心命题;与此同时,出海全球市场的战略方向也为企业带来了突破增长边界的全新可选项
    的头像 发表于 09-25 16:12 385次阅读

    ‌SN74HCS373 Octal透明技术解析与应用指南

    Texas Instruments SN74HCS373/SN74HCS373-Q1八路透明D类包含八个D类。所有输入均包括施密特触发
    的头像 发表于 09-24 10:40 511次阅读
    ‌SN74HCS373 Octal透明<b class='flag-5'>锁</b>存<b class='flag-5'>器</b>技术解析与应用指南

    SMA连接类型:低损耗款性能优势全解析

    对需要高精度、高频段、远距离传输的场景来说,SMA 低损耗款不是 “可选项”,而是 “必选项”—— 普通款的损耗看似不大,但叠加后会严重影响系统性能,而低损耗款通过材质、结构、工艺的优化,能最大限度 “守住” 信号能量,提升系统效率、降低成本。
    的头像 发表于 09-19 10:10 1622次阅读
    SMA连接<b class='flag-5'>器</b>类型:低损耗款性能优势全解析

    机房服务需要配ups电源吗?要配什么样的ups电源好?

    当然需要!而且非常重要。可以这么说:UPS电源不是服务的“可选项”,而是保障业务连续性的“必选项”。给您一个简单直接的比喻:UPS就是服务群的“备用心脏”和“电压稳定
    的头像 发表于 09-19 10:09 861次阅读
    机房服务<b class='flag-5'>器</b>需要配ups电源吗?要配什么样的ups电源好?

    政策风口已至!不懂绿电直连,何以打造“真”零碳园区?

    国家层面把“绿电直连”写入园区建设任务书,为何不是传统并网?为何必须“直连”?本文从政策脉络、经济账本、能源安全、碳减助力四维度拆解,揭示绿电直连从“可选项”跃升为“必选项”的内在必然。
    的头像 发表于 09-18 14:44 503次阅读
    政策风口已至!不懂绿电直连,何以打造“真”零碳园区?

    2025灯具照明行业转型:AI+MES实现智能化升级

    对于灯具照明行业而言,AI智能化MES已不再是可选项,而是迈向高质量发展、构建核心竞争力的必由之路;不要追求一步到位,可以从质量追溯、生产无纸化等核心模块开始,逐步扩展到排程、预测性维护等高级AI应用。
    的头像 发表于 09-17 14:11 310次阅读

    termux如何搭建python游戏

    模拟,支持通过APT包管理安装软件。搭建Python游戏开发环境前需完成以下基础配置: 1. 更换国内源 为提升下载速度,需替换Termux默认源为清华源,执行以下命令: ```bash
    发表于 08-29 07:06

    为什么在MCAL版本SW32K3_S32M27x_RTD_R21-11_5.0.0中,SPI的StartNotification是不可选项

    为什么在MCAL版本SW32K3_S32M27x_RTD_R21-11_5.0.0中,SPI的StartNotification是不可选项
    发表于 03-28 06:17

    的工作原理与作用

    (Latch)作为数字电路中的基本元件,扮演着存储单个比特信息的关键角色。其独特的功能和广泛的应用领域使其成为数字电路设计和实现的核心组成部分。本文将深入探讨
    的头像 发表于 02-03 16:53 4055次阅读

    电路工作原理 自电路与常开电路的区别

    一、自电路工作原理 自电路是电路中的一种特殊设计,一旦按下开关,电路就能自动保持持续通电状态,直到按下其他开关使之断路为止。这种特性使得自电路在需要长时间保持电路接通的场景中得到
    的头像 发表于 01-31 10:07 5433次阅读

    适用于MySQL和MariaDB的Python连接:可靠的MySQL数据连接和数据库

    和 Linux 的 wheel 包分发。 直接连接 该解决方案使您能够通过 TCP/IP 建立与 MySQL 或者 MariaDB 数据库服务的直接连接,而无需数据库客户端库。另外直接连接可以提高 Python 应用程
    的头像 发表于 01-17 12:18 844次阅读
    适用于MySQL和MariaDB的<b class='flag-5'>Python</b>连接<b class='flag-5'>器</b>:可靠的MySQL数据连接<b class='flag-5'>器</b>和数据库