PyPy 通过采用即时编译技术,能够显著提升 Python 代码的执行效率。

termcolor 是一个第三方库,用于在终端输出彩色文本。colored 函数可以根据指定的颜色来格式化文本。

from termcolor import colored

调用了 time 模块中的 time() 函数,并将返回值(当前时间的时间戳,单位为秒)赋值给变量 start。这里记录下开始计算之前的时间点,以便后续计算总耗时。

start = time.time()

初始化变量 number 为 0。这个变量将用来累加从 0 到 99,999,999 的所有整数。

number = 0
for i in range(100000000):
# 在循环体内,每次循环都将变量 i 的值累加到变量 number 上。这样,在循环结束时,number 将包含从 0 到 99,999,999 所有整数的和。
number += i

print(colored(“FINISHED”, “green”))

再次调用 time.time() 获取当前时间戳,并与之前记录的开始时间戳(存储在变量 start 中)相减,得到执行计算所花费的总时间(单位为秒)。然后,使用 f-string 格式化字符串,将计算出的耗时插入到字符串中并打印出来。这样用户就可以看到程序执行所需的时间。

print(f"Ellapsed time: {time.time() - start} s")


![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/2f92d1f3fd224157b957746375719799.gif#pic_center)


这不是学术评估,但结果令人惊叹。与默认的 Python 解释器(大约需要 10 秒)相比,PyPy 仅用 0.22 秒就完成了执行。更令人惊讶的是,无需任何修改,Python 代码即可直接在 PyPy 上运行。而在同一台计算机上,等效的 C 语言实现需要 0.32 秒。PyPy 甚至超过了最快的 C 语言实现。


**为什么 PyPy 这么快?**


尽管代码看起来完全相同,但其执行方式却大相径庭。PyPy 提升执行速度的关键在于采用 “即时编译”(Just-In-Time Compilation),也就是 **JIT 编译技术**。


C、C++、Swift、Haskell、Rust 等编程语言通常采用**提前编译**(AOT 编译)的方式。这意味着,使用这些语言编写的代码,在程序运行之前,编译器会将其源代码转换为特定计算机架构可执行的机器码。因此,当程序执行时,实际运行的是机器码,而非原始的源代码。


![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/1e8e5a0da4b0496aadc0baaebfef7336.png)


不同于 C 语言等上述语言,Python、JavaScript、PHP 等语言采用的是另一种方法 —— **解释器**。与将源代码转换为机器码不同,解释过程中源代码保持不变。每次运行程序时,解释器都会逐行查看代码并执行。例如,每个 Web 浏览器都内置了 JavaScript 解释器。


![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/945451c03b9c4f36967cc778cdadd7b6.png)


**PyPy 利用即时编译技术来执行 Python 代码**,与传统解释器不同,它不会逐行运行代码,而是在程序执行前先将部分代码编译成机器码。即时编译结合了提前编译和解释的优点。如图所示,PyPy 采用的即时编译融合了这两种方法,**通过提前编译提升性能,同时保持解释型语言的灵活性和跨平台可用性**。


![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/f6cb660b97d6473b92ad72efb898006b.png)


AOT 优点:


1. **在程序运行前进行编译**,可以避免运行时的编译性能消耗和内存消耗。
2. 程序在运行初期即可达到最高性能。
3. 显著加快程序启动速度。


AOT 缺点:


1. 程序运行前的编译增加了程序安装的时间。**无运行时性能加成**,不能根据程序运行情况做进一步的优化。
2. 提前编译的内容保存会占用更多的外部存储空间。


JIT 优点:


1. 在程序运行时,根据算法计算出**热点代码**,然后进行 JIT 实时编译,这种方式吞吐量高,**有运行时性能加成**,可以跑得更快,并可以做到动态生成代码等。
2. 可以根据当前程序的运行情况生成最优的机器指令序列,从而提高程序的执行效率。
3. 当程序需要支持动态链接时,JIT 是一个优先的选择。
4. JIT 可以根据进程中内存的实际情况调整代码,从而更充分地利用内存资源。


JIT 缺点:


1. **编译过程会占用运行时资源,这可能导致进程卡顿,影响用户体验**。
2. 相对启动速度较慢,并需要一定时间和调用频率才能触发 JIT 的分层机制。
3. 编译时间需要占用运行时间,并且某些代码的编译优化可能无法实现,因此我们需要考虑程序流畅性和编译时间的问题。
4. 在编译准备和识别频繁使用的方法时,需要消耗一定的时间,这使得初始编译可能无法达到最高性能。因此,JIT 需要在运行时不断优化代码,以提高程序的执行效率。


PyPy 在我们的程序已经很快或者大部分运行时间都用于调用非 Python 库时,效果较差。然而,如果我们有一个运行缓慢的程序,其中大部分时间都花在执行 Python 代码和密集的计算上,PyPy 可以发挥奇效。


总结:编译型编程语言会将源代码提前转化为机器代码,而解释型编程语言则由解释器逐行运行。即时编译技术结合了提前编译和解释的优点,实现边运行边编译。JIT 与 AOT 的主要区别在于编译时间:JIT 在运行时编译,而 AOT 则在程序运行前进行编译。PyPy 采用即时编译技术,显著提高了 Python 代码的运行速度。即时编译不仅提升了程序执行效率,还保持了解释型语言的灵活性和跨平台可用性。




---


**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**

![img](https://img-blog.csdnimg.cn/img_convert/5f155abe5ff1bf2e58352497ca9cb71a.png)

 

![img](https://img-blog.csdnimg.cn/img_convert/0396ce167fb754312bc8ea83a4cc069a.png)

![img](https://img-blog.csdnimg.cn/img_convert/46506ae54be168b93cf63939786134ca.png)

![img](https://img-blog.csdnimg.cn/img_convert/252731a671c1fb70aad5355a2c5eeff0.png)

![img](https://img-blog.csdnimg.cn/img_convert/6c361282296f86381401c05e862fe4e9.png)

![img](https://img-blog.csdnimg.cn/img_convert/9f49b566129f47b8a67243c1008edf79.png)

 

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)**


**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)**

<img src="https://img-community.csdnimg.cn/images/fd6ebf0d450a4dbea7428752dc7ffd34.jpg" alt="img" style="zoom:50%;" />
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值