Python 3.12 将能够使用不共享 GIL 的解释器
自 Python 1.5(1997 年)以来,PyInterpreterState
结构就被添加到了 CPython,允许开发者在一个进程中同时运行多个 Python 解释器。然而,多个解释器在同一进程中运行时,并不能真正地相互隔离。同一进程中的解释器始终共享大量全局状态。这是很多错误的来源,随着越来越多的人使用该功能,其影响也越来越大。
造成这个情况的主要原因就是由于 GIL(全局解释器锁),这是 CPython 的一个核心特性,而为了解决这个问题就有开发者曾提出过删除全局解释器锁 GIL 的提议。除此之外,另一个显而易见的方法则是建立每一个解释器的 GIL:为进程中产生的每一个解释器建立一个单独的锁。
因此在去年 3 月,开发者 Eric Snow 就提出了一个针对每个解释器的全局解释器锁(A Per-Interpreter GIL),通过充分的隔离有助于实现真正的多核并行,其中的解释器不再共享 GIL。
Eric Snow 在提议中表示:
有了每个解释器的 GIL,CPython 将能够为在不同解释器中运行的代码实现真正的多核并行性。
经过一年多时间的讨论,日前 CPython 的核心开发者 Emily Morehouse 代表指导委员会正式接受了这个提议(PEP 684),Eric Snow 仍然以 Python 3.12 为目标,希望能在该版本中看到每个解释器的 GIL,Python 3.12 预计将于今年 10 月发布。
然而,实现每个解释器的 GIL 不是一个小任务。一般来说,在多个解释器之间共享的任何可变状态都必须由锁来保护。这意味着,如果要为每一个解释器建立一个单独的锁,那么多个解释器之间共享的状态数量必须降到绝对最低。适当地隔离解释器需要将大部分 CPython 运行时状态存储在 PyInterpreterState
结构中。目前,只有其中的一部分是这样的,其中大部分都需要被移动。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
SQL Chat —— 基于对话式交互的 SQL 客户端
SQL Chat 是基于对话式交互的 SQL 客户端,以 Chat 交互为中心,与传统 GUI 模式的 SQL 客户端完全不同,可以使用自然语言询问数据库问题和查询数据库。 随着进入Developer Tools 2.0 时代,有大量机会使用基于聊天的界面重建现有工具。SQL 客户端也不例外。与在许多 UI 控件之间导航不同,基于聊天的界面更加直观。当然,前提是可行,而该项目的目标就是提供这种体验。 SQL Chat 由 Next.js 构建,它支持以下数据库,预计会随着时间的推移添加更多: MySQL PostgreSQL 根据介绍,SQL Chat 是Bytebase 成立以来的第二条独立产品线。从零打造,以 Chat 交互为中心,颠覆传统 GUI 模式的 SQL 客户端。采用 Next.js 框架,国内可直接部署到腾讯云 Web 应用托管服务,国外也可一键部署到 Vercel,同样支持私有化部署。
- 下一篇
Python 新提案 PyBI:分发 Python 二进制文件的标准格式
CPython 核心开发者 Nathaniel J. Smith 提交了一项新提案: PEP 711—— PyBI: a standard format for distributing Python Binaries 根据该提案的描述,PyBI (Python Binary) 是用于分发 Python 二进制文件的标准格式。Nathaniel 对 PyBI 的概括如下:它不是预构建的 Python 软件包,而是预构建的 Python 解释器。 此提案定义了一个标准的打包文件格式来保存预构建的 Python 解释器,并尽可能重用现有的 Python 打包标准。 命名格式:{distribution}-{version}[-{build tag}]-{platform tag}.pybi 示例: cpython-3.9.3-manylinux_2014.pybi cpython-3.10b2-win_amd64.pybi 详情查看原始草案:https://github.com/njsmith/posy/blob/main/pybi/README.md PyBI 构建工具:https://...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Windows10,CentOS7,CentOS8安装Nodejs环境
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长