深度解析为什么 pypy 让 Python 比 C 还快!

本文深入探讨了Pypy如何利用JIT技术实现比CPython更快的性能,通过比较不同Python解释器的实现,展示了Pypy在速度和内存使用上的优势。尽管Pypy在科学计算和AI库支持上存在不足,但在纯Python代码执行上表现出色,尤其适合长驻内存的高并发应用。此外,文章还提供了性能测试和优化方法,强调了算法在性能提升中的关键作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大家好,我是启航。

之前发的原文讲的内容偏理论,干货比较少。我们可以再深入一点点,了解pypy的真相。

正式开始之前,多唠叨两句。我司发力多个赛道的游戏,其中包括某鱼类游戏Top2项目,拿过阿拉丁神灯奖的SLG卡牌小游戏项目和海外三消游戏。这些不同类型的游戏,后端大多是使用的是pypy。对于如何使用pypy,我有一点使用经验可以聊聊。话不多说,正式开始,本文包括下面几个部分:

  • 语言分类

  • python的解释器实现

  • pypy为什么快

  • 性能比较

  • 性能优化方法

  • pypy的特性

  • 小结

语言分类

我们先从最基本的一些语言分类概念聊起,对这部分内容非常了解的朋友可以跳过。

静态语言 vs 动态语言

如果在编译时知道变量的类型,则该语言为静态类型。静态类型语言的常见示例包括Java,C,C ++,FORTRAN,Pascal和Scala。在静态类型语言中,一旦使用类型声明了变量,就无法将其分配给其他不同类型的变量,这样做会在编译时引发类型错误。

# java

int data;
data = 50;
data = “Hello Game_404!”; // causes an compilation error

如果在运行时检查变量的类型,则语言是动态类型的。动态类型语言的常见示例包括JavaScript,Objective-C,PHP,Python,Ruby,Lisp和Tcl。在动态类型语言中,变量在运行时通过赋值语句绑定到对象,并且可以在程序执行期间将相同的变量绑定到不同类型的对象。

# python

data = 10;
data = "Hello Game_404!"; // no error caused
data = data + str(10)

一般来说静态语言编译成字节码执行,动态语言使用解释器执行。编译型语言性能更高,但是较难移植到不同的CPU架构体系和操作系统。解释型语言易于移植,性能会比编译语言要差得多。这是频谱的两个极端。

强类型语言 vs 弱类型语言

强类型语言是一种变量被绑定到特定数据类型的语言,如果类型与表达式中的预期不一致,将导致类型错误,比如下面这个:

# python

temp = “Hello Game_404!”
temp = temp + 10; // program terminates with below stated error (TypeError: must be str, not int)

python和我们感觉不一致,背叛了弱类型语言,不像世界上最好的语言:(

# php

$temp = “Hello Game_404!”;
$temp = $temp + 10; // no error caused
echo $temp;

常见编程语言的象限分类如下图:

Image

language

这一部分内容主要翻译自参考链接1

python的解释器实现

python是一门动态编程语言,由特定的解释器解释执行。下面是一些解释器实现:

  • CPython 使用c语言实现的解释器

  • PyPy 使用python语言的子集RPython实现的解释器,一般情况下PyPy比CPython快4.2倍

  • Stackless Python 带有协程实现的解释器

  • Jython Java实现的解释器

  • IronPython .net实现的解释器

  • Pyston 一个较新的实现,是CPython 3.8.8的一个分支,具有其他针对性能的优化。它针对大型现实应用程序(例如Web服务),无需进行开发工作即可提供高达30%的加速。

  • ...

还有几个相关概念:

  • IPython && Jupyter ipython是使用python构建的交互式shell, Jupyter是其web化的包装。

  • Anaconda 是一个python虚拟环境,Python数据科学常用。

  • mypyc 一个新的项目,将python编译成c代码库,以期提高python的运行效率。

  • py文件和pyc文件 pyc文件是python编译后的字节码,也可以由python解释器执行。

  • wheel文件和egg文件 都是项目版本发布的打包文件,wheel是最新标准。

  • ...

这里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

平静愉悦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值