Python 的 3.9.0 版本正在开发中,计划在 2020-10-05 发布 final 版本。

官方在 changelog 中披露了很多细节,其中有一项“vectorcall”特性是最容易被接受的,本文打算带大家先来一探究竟。

事实上,早在 Python 3.8 版本中就已部分地实现了 vectorcall,只不过它是暂时性的,被隐藏起来了,按计划是在 3.9 版本中实现完全体。下图是 3.8 版本中的简介:

那么,什么是 vectorcall 呢?它会带来哪些变化呢?

“a fast calling protocol for CPython”,即它是 CPython 的一种快速调用协议,可以加速 CPython 解释器在调用类对象时的速度。

(PS:需要注意的是,这里说的“协议”是一种广义的称呼,它跟我们熟知的网络协议或通信协议不同,可理解为对代码作调用时的一种约定、一种实现方式)

这种协议是在 PEP-590 中被提出的(时间是 2019-03-29),对应的 bpo 是 issue37207,历时近一年的开发,目前它的实现已合入了代码仓。

用一句话概括它的核心要点是:它将提升 list()、tuple()、dict() 等主要类型的调用速度,同时它还可以被用在自定义的类上。

结合 PEP 与 bpo 信息,我提炼了以下的详细要点:

vectorcall 是对 fastcall 的正式化。在之前的 CPython 中存在一些零散的优化点(即 fastcall),如今官方把它们系统化了,给出了一个正式的“vectorcall”称呼

vectorcall 适用于多数内置类型。据当前的披露信息,它适用于 list、tuple、dict、set、frozenset 与 range 这 6 种主要的内置类型(部分测量数据显示,速度提升率达 10%~30%)

vectorcall 是对性能与灵活性的调和。之前的解释器具有很高的灵活性,但是在对象调用过程中,存在不必要的中间对象以及间接的调用开销,如今是设法消除了这部分开销,得以提升了性能

PEP-590 中还详细介绍了 CPython 的实现细节,并罗列了 C API 的变化点,这部分内容就不展开了,感兴趣的同学请自行查阅文档。

--------猫哥碎碎念分割线--------

主要的内容就算介绍完了,它很简单,并不难理解,不会带来学习的负担,也不会造成什么意见分歧。

但是说句老实话,这个性能提升可能显得有点“费力不讨好”:内置类型的调用速度并不会造成什么性能问题(并不慢),而提升空间也仅是纳秒/微秒级别,非常有限。多名核心开发者花费大半年时间和精力,到底值不值得?

我们恐怕都没有对此作出价值评判的资格。仁者见仁,智者见智。

但是,也许我们可以往乐观的方面想:对于这种微不足道的性能提升,核心开发者们都能认真对待、精益求精、持续投入、考虑全面,那在其它方面上也绝不会逊色。所以,我们有理由对 Python 的未来保持乐观的希望!

--------猫哥碎碎念分割线--------

相关链接:

python3.9性能_Python 3.9 性能优化:更快的 list()、dict() 和 range() 等内置类型相关推荐

  1. python 3.9 性能_Python 3.9 性能优化:更快的 list()、dict() 和 range() 等内置类型

    原标题:Python 3.9 性能优化:更快的 list().dict() 和 range() 等内置类型 Python 的 3.9.0 版本正在开发中,计划在 2020-10-05发布final版本 ...

  2. clickhouse hbase性能对比_如何让 HBase 更快、更稳、更省钱

    概述 Apache HBase 是 Apache Hadoop 生态体系中的大规模.可扩展.分布式的数据存储服务.同时它还是 NoSQL 数据库.它的设计初衷是为包含了数百万列的数十亿行记录提供随机的 ...

  3. 自主品牌语音交互性能测评,荣威RX5反应更快,博越变暖男

    文:小伟哥 图:小伟哥.网络 说起语音控制,我们第一时间想到的是iphone上的SiRi,你可以通过语音打电话.发信息,还可以查询天气,有时候还可以陪你聊天.如今许多汽车品牌都把自己的语音控制系统作为 ...

  4. python 字典查询比列表快_Python字典vs列表,哪个更快?

    我正在编写一个欧拉问题,我遇到的问题激起了我的好奇心.我有两个代码片段.一个是列表,另一个是字典. 使用清单: n=100000 num=[] suma=0 for i in range(n,1,-1 ...

  5. 【前端性能】常见前端性能优化

    常见性能优化 前言 一.图片优化 1.雪碧图(图片精灵) 2.图片压缩 3.字体图标代替图片 4.webp图片 二.DOM优化 1.缓存DOM节点查找的结果 2.防抖和节流 3.事件代理 4.减少合并 ...

  6. IntelliJ IDEA 2019.3 发布,启动更快,性能更好(新特性解读)

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 原文地址:https://www.jetbrains.com/id ...

  7. Java 启动和停止界面_IntelliJ IDEA 2019.3 发布,启动更快,性能更好(新特性解读)...

    点击上方"小哈学Java",选择"星标" 回复"资源",领取全网最火的Java核心知识总结~ 2019.3 11 月 28 IntelliJ ...

  8. python异步io多文件_Python 异步 IO 性能又上一层楼

    最近看源码的过程中,发现了一个比较有意思的库,aiomultiprocess,我认为他确实是 Python 升级到 3.8 之后一个特性的总结库,包括静态检查和性能提升. 这个是作者提供的一个 IO ...

  9. MySQL 的性能(下篇)—— 性能优化方法

    简介 文中内容均为阅读前辈的文章所整理而来,参考文章已在最后全指明 本文分为上下两篇: 上篇:MySQL 的 SQL 执行分析 下篇:MySQL 性能优化 下面为下篇内容,分为以下部分: 一.创建表时 ...

最新文章

  1. 11.Map集合之实现类HashMapHashtableTreeMapLinkedHashMapProperties浅析
  2. 北大港大,都将落地深圳!
  3. ExtJS(3)- 自定义组件(星级评分)
  4. 解决linux不能安装g++问题
  5. 0 最优化问题数学概念补充
  6. 追求神乎其技的程式设计之道
  7. 汇聚内容页关键词优化的小窍门
  8. 微信大改版,时隔4年再次华丽转身。
  9. sql2000 sp3、sql2000 sp4升级补丁下载和安装须知
  10. Battery_Charing_Discharing:基于MATLAB/Simulink的锂电池充、放电控制,充电控制和放电控制均采用电压电流双闭环控制
  11. Android 引入第三方字体库的简单使用
  12. html 复选按钮 全选,JS实现复选按钮控件全选和批量操作
  13. idea easyYapi插件导入yapi接口使用及踩坑记录
  14. 使用FPGA实现的图像锐化算法(USM)设计
  15. 洛谷 P1824 进击的奶牛 题解
  16. 新西兰计算机预科学费,2018年新西兰ACG预科课程介绍(含学费、开学时间)
  17. 美国区块链公司Espresso Systems因涉嫌知识产权盗窃被起诉
  18. 5大好用又免费BI软件系统
  19. Autodesk Helius PFA 2019 永久版
  20. 王道ch3-Stackp90_2.有一个列车,HS分别表示硬座软座,利用一个栈将序列调整为S在H之前

热门文章

  1. 深入分析Cocos2d-x 2.0中的“纹理”和精灵-沈大海cocos2d-x教程20
  2. 快速搭建企业级邮件系统iRedMail+Mysql+Postfix+php
  3. 【收藏】ASP.NET英文技术文章推荐[10/28 – 11/3]
  4. H3C 模拟器 pc与sw直连 开启telnet
  5. 最短路径(二维矩阵)
  6. Mongo 3.6.1版本Sharding集群配置
  7. Java之美[从菜鸟到高手演变]之Exception
  8. C++中的未定义的行为
  9. C#利用SharpZipLib解压或压缩文件夹实例操作
  10. meta几个常用的地方