成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

PyPy為什么能讓Python比C還快?一文了解內在機制

開發 開發工具 后端
盡管代碼完全相同,但代碼的執行方式卻大不相同。 PyPy 提升速度的秘訣是「即時編譯( just-in-time compilation)」,即 JIT 編譯。

[[397277]]

對于研究人員來說,迅速把想法代碼化并查看其是否行得通至關重要。Python 是能夠實現這一目標的出色語言,它能夠讓人們專注于想法本身,而不必過度為代碼格式等無聊的事情困擾。

但是,Python 有一個致命的缺點:速度比 C、C ++ 等語言慢很多。那么,構建一個 Python 原型測試想法之后,如何將其轉變為快速且高性能的工具?通常來說,人們還要再進行一步工作:將 Python 代碼手動轉換為 C 語言的代碼。但如果 Python 原型本身就可以運行得很快,那么轉換代碼的時間就可以做一些更有意義的事情。

而 PyPy,恰好可以解決這一問題。它能夠讓 Python 代碼運行得比 C 還快。

  1. import time 
  2. from termcolor import colored 
  3.  
  4. start = time.time() 
  5. number = 0 
  6. for i in range(100000000): 
  7.     number += i 
  8.      
  9. print(colored("FINISHED", "green")) 
  10. print(f"Ellapsed time: {time.time() - start} s") 

為了證明 PyPy 的速度,使用默認的 Python 解釋器和 PyPy 運行上述代碼,執行一個從整數 0 加到 100,000,000 的循環, 然后打印出運行時間。運行結果如下:

圖片

運行時間 Python vs PyPy

這不是學術意義上的評估,但該結果是令人驚嘆的。與大約需要 10 秒鐘的默認 Python 解釋器相比,PyPy 僅用 0.22 秒就完成了執行。而且無需進行任何更改就可以直接將 Python 代碼放到 PyPy 上。而同一臺計算機上,等效的 C 語言實現需要 0.32 秒,PyPy 甚至擊敗了最快的 C 語言。

為什么 PyPy 這么快?

盡管代碼完全相同,但代碼的執行方式卻大不相同。 PyPy 提升速度的秘訣是「即時編譯( just-in-time compilation)」,即 JIT 編譯。

提前編譯

C、C ++、Swift、Haskell、Rust 等編程語言通常是提前編譯(AOT 編譯)的。這意味著用這些語言編寫代碼之后,編譯器會將源代碼轉換成特定計算機架構可讀的機器碼。也就是說在執行程序時,執行的并不是原始源代碼,而是機器碼。

提前編譯把源代碼轉化為機器代碼

解釋語言

與 C 語言等上述語言不同,Python、JavaScript、PHP 等語言采用另一種方法——解釋語言。與將源代碼轉換為機器碼相比,解釋的過程中源代碼是保持不變的。每次運行程序時,解釋器都會逐行查看代碼并運行。例如,每個 Web 瀏覽器都內置了 JavaScript 解釋器。

解釋器逐行運行程序

即時編譯

PyPy 是利用即時編譯來執行 Python 代碼的。即 PyPy 不同于解釋器,它并不會逐行運行代碼,而是在執行程序前先將部分代碼編譯成機器碼。

JIT 編譯綜合了提前編譯和解釋

如上圖所示,而 PyPy 使用的 JIT 編譯是解釋和提前編譯的結合,可以利用提前編譯來提高性能,并提高解釋型語言的靈活性和跨平臺可用性。

原文鏈接:https://towardsdatascience.com/run-your-python-code-as-fast-as-c-4ae49935a826

【本文是51CTO專欄機構“機器之心”的原創譯文,微信公眾號“機器之心( id: almosthuman2014)”】 

戳這里,看該作者更多好文

 

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2024-01-16 16:39:33

PythonPyPy

2024-07-26 00:00:10

2022-09-29 13:09:38

DataClassPython代碼

2022-07-03 08:25:09

OSITCP/IP

2025-01-15 09:06:57

servlet服務器Java

2020-08-27 07:34:50

Zookeeper數據結構

2024-05-27 00:00:00

.NET游戲引擎C#

2023-05-17 11:33:45

梯度下降機器學習

2022-03-14 08:01:06

LRU算法線程池

2022-02-25 07:34:36

MQTT協議RabbitMQ

2022-06-08 08:11:56

威脅建模網絡安全網絡攻擊

2023-11-06 08:16:19

APM系統運維

2025-05-23 09:38:54

JWT開發Go

2022-11-11 19:09:13

架構

2019-07-04 15:16:52

數據挖掘大數據算法

2022-09-06 11:21:49

光網絡光纖

2023-04-26 15:43:24

容器編排容器編排工具

2023-11-20 08:18:49

Netty服務器

2018-04-25 10:13:30

Redis內存模型

2024-12-27 16:30:42

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 四虎在线视频 | 久久一区 | 中国人pornoxxx麻豆 | 亚洲综合婷婷 | 国产一区二区三区四区在线观看 | 97精品国产97久久久久久免费 | aaa级片| 波多野结衣中文字幕一区二区三区 | 特黄毛片视频 | 在线日韩在线 | 免费观看羞羞视频网站 | 男人天堂av网| 久久综合99 | av在线播放网 | 96国产精品久久久久aⅴ四区 | 国产精品96久久久久久 | 欧美视频1区 | 在线观看精品视频网站 | 日韩综合网 | 国产福利资源在线 | 亚洲精品国产成人 | 亚洲综合大片69999 | 搞黄视频免费看 | 日韩一区二 | 久草在线青青草 | 久久综合九九 | 亚洲精品乱码久久久久久久久 | 欧美aaa一级片 | 四虎影院在线免费观看 | 一级免费毛片 | 日韩视频高清 | 99久久久无码国产精品 | 夜夜操天天艹 | 欧美一级大片 | 大学生a级毛片免费视频 | 日本精a在线观看 | 久久男女视频 | 天天操人人干 | 人人干在线视频 | 亚州精品天堂中文字幕 | 欧美一区二区在线观看 |