精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

你知道為什么Python這么慢?

開發 后端 新聞
Python 現在越來越火,已經迅速擴張到包括 DevOps、數據科學、Web 開發、信息安全等各個領域當中。然而,相比起 Python 擴張的速度,Python 代碼的運行速度就顯得有點遜色了。

 [[247722]]

Python 現在越來越火,已經迅速擴張到包括 DevOps、數據科學、Web 開發、信息安全等各個領域當中。

然而,相比起 Python 擴張的速度,Python 代碼的運行速度就顯得有點遜色了。

在代碼運行速度方面,Java、C、C++、C# 和 Python 要如何進行比較呢?并沒有一個放之四海而皆準的標準,因為具體結果很大程度上取決于運行的程序類型,而語言基準測試Computer Language Benchmarks Games可以作為衡量的一個方面

根據我這些年來進行語言基準測試的經驗來看,Python 比很多語言運行起來都要慢。無論是使用 JIT 編譯器的 C#、Java,還是使用 AOT 編譯器的 C、C++,又或者是 JavaScript 這些解釋型語言,Python 都比它們運行得慢

注意:對于文中的 “Python” ,一般指 CPython 這個官方的實現。當然我也會在本文中提到其它語言的 Python 實現。

我要回答的是這個問題:對于一個類似的程序,Python 要比其它語言慢 2 到 10 倍不等,這其中的原因是什么?又有沒有改善的方法呢?

主流的說法有這些:

  • “是全局解釋器鎖Global Interpreter Lock(GIL)的原因”
  • “是因為 Python 是解釋型語言而不是編譯型語言”
  • “是因為 Python 是一種動態類型的語言”

哪一個才是是影響 Python 運行效率的主要原因呢?

是全局解釋器鎖的原因嗎?

現在很多計算機都配備了具有多個核的 CPU ,有時甚至還會有多個處理器。為了更充分利用它們的處理能力,操作系統定義了一個稱為線程的低級結構。某一個進程(例如 Chrome 瀏覽器)可以建立多個線程,在系統內執行不同的操作。在這種情況下,CPU 密集型進程就可以跨核心分擔負載了,這樣的做法可以大大提高應用程序的運行效率。

例如在我寫這篇文章時,我的 Chrome 瀏覽器打開了 44 個線程。需要提及的是,基于 POSIX 的操作系統(例如 Mac OS、Linux)和 Windows 操作系統的線程結構、API 都是不同的,因此操作系統還負責對各個線程的調度。

如果你還沒有寫過多線程執行的代碼,你就需要了解一下線程鎖的概念了。多線程進程比單線程進程更為復雜,是因為需要使用線程鎖來確保同一個內存地址中的數據不會被多個線程同時訪問或更改。

CPython 解釋器在創建變量時,首先會分配內存,然后對該變量的引用進行計數,這稱為引用計數reference counting。如果變量的引用數變為 0,這個變量就會從內存中釋放掉。這就是在 for 循環代碼塊內創建臨時變量不會增加內存消耗的原因。

而當多個線程內共享一個變量時,CPython 鎖定引用計數的關鍵就在于使用了 GIL,它會謹慎地控制線程的執行情況,無論同時存在多少個線程,解釋器每次只允許一個線程進行操作。

這會對 Python 程序的性能有什么影響?

如果你的程序只有單線程、單進程,代碼的速度和性能不會受到全局解釋器鎖的影響。

但如果你通過在單進程中使用多線程實現并發,并且是 IO 密集型(例如網絡 IO 或磁盤 IO)的線程,GIL 競爭的效果就很明顯了。

由 David Beazley 提供的 GIL 競爭情況圖http://dabeaz.blogspot.com/2010/01/python-gil-visualized.html

由 David Beazley 提供的 GIL 競爭情況圖http://dabeaz.blogspot.com/2010/01/python-gil-visualized.html

對于一個 web 應用(例如 Django),同時還使用了 WSGI,那么對這個 web 應用的每一個請求都運行一個單獨的 Python 解釋器,而且每個請求只有一個鎖。同時因為 Python 解釋器的啟動比較慢,某些 WSGI 實現還具有“守護進程模式”,可以使 Python 進程一直就緒

其它的 Python 解釋器表現如何?

PyPy 也是一種帶有 GIL 的解釋器,但通常比 CPython 要快 3 倍以上。

Jython 則是一種沒有 GIL 的解釋器,這是因為 Jython 中的 Python 線程使用 Java 線程來實現,并且由 JVM 內存管理系統來進行管理。

JavaScript 在這方面又是怎樣做的呢?

所有的 Javascript 引擎使用的都是 mark-and-sweep 垃圾收集算法,而 GIL 使用的則是 CPython 的內存管理算法。

JavaScript 沒有 GIL,而且它是單線程的,也不需要用到 GIL, JavaScript 的事件循環和 Promise/Callback 模式實現了以異步編程的方式代替并發。在 Python 當中也有一個類似的 asyncio 事件循環。

是因為 Python 是解釋型語言嗎?

我經常會聽到這個說法,但是這過于粗陋地簡化了 Python 所實際做的工作了。其實當終端上執行 python myscript.py 之后,CPython 會對代碼進行一系列的讀取、語法分析、解析、編譯、解釋和執行的操作。

如果你對這一系列過程感興趣,也可以閱讀一下我之前的文章:在 6 分鐘內修改 Python 語言

.pyc 文件的創建是這個過程的重點。在代碼編譯階段,Python 3 會將字節碼序列寫入 __pycache__/ 下的文件中,而 Python 2 則會將字節碼序列寫入當前目錄的 .pyc 文件中。對于你編寫的腳本、導入的所有代碼以及第三方模塊都是如此。

因此,絕大多數情況下(除非你的代碼是一次性的……),Python 都會解釋字節碼并本地執行。與 Java、C#.NET 相比:

Java 代碼會被編譯為“中間語言”,由 Java 虛擬機讀取字節碼,并將其即時編譯為機器碼。.NET CIL 也是如此,.NET CLR(Common-Language-Runtime)將字節碼即時編譯為機器碼。

既然 Python 像 Java 和 C# 那樣都使用虛擬機或某種字節碼,為什么 Python 在基準測試中仍然比 Java 和 C# 慢得多呢?首要原因是,.NET 和 Java 都是 JIT 編譯的。

即時Just-in-time(JIT)編譯需要一種中間語言,以便將代碼拆分為多個塊(或多個幀)。而提前ahead of time(AOT)編譯器則需要確保 CPU 在任何交互發生之前理解每一行代碼。

JIT 本身不會使執行速度加快,因為它執行的仍然是同樣的字節碼序列。但是 JIT 會允許在運行時進行優化。一個優秀的 JIT 優化器會分析出程序的哪些部分會被多次執行,這就是程序中的“熱點”,然后優化器會將這些代碼替換為更有效率的版本以實現優化。

這就意味著如果你的程序是多次重復相同的操作時,有可能會被優化器優化得更快。而且,Java 和 C# 是強類型語言,因此優化器對代碼的判斷可以更為準確。

PyPy 使用了明顯快于 CPython 的 JIT。更詳細的結果可以在這篇性能基準測試文章中看到:哪一個 Python 版本最快?

那為什么 CPython 不使用 JIT 呢?

JIT 也不是***的,它的一個顯著缺點就在于啟動時間。 CPython 的啟動時間已經相對比較慢,而 PyPy 比 CPython 啟動還要慢 2 到 3 倍。Java 虛擬機啟動速度也是出了名的慢。.NET CLR 則通過在系統啟動時啟動來優化體驗,而 CLR 的開發者也是在 CLR 上開發該操作系統。

因此如果你有個長時間運行的單一 Python 進程,JIT 就比較有意義了,因為代碼里有“熱點”可以優化。

不過,CPython 是個通用的實現。設想如果使用 Python 開發命令行程序,但每次調用 CLI 時都必須等待 JIT 緩慢啟動,這種體驗就相當不好了。

CPython 試圖用于各種使用情況。有可能實現將 JIT 插入到 CPython 中,但這個改進工作的進度基本處于停滯不前的狀態。

如果你想充分發揮 JIT 的優勢,請使用 PyPy。

是因為 Python 是一種動態類型的語言嗎?

在 C、C++、Java、C#、Go 這些靜態類型語言中,必須在聲明變量時指定變量的類型。而在動態類型語言中,雖然也有類型的概念,但變量的類型是可改變的。

  1. a = 1
  2. a = "foo"

在上面這個示例里,Python 將變量 a 一開始存儲整數類型變量的內存空間釋放了,并創建了一個新的存儲字符串類型的內存空間,并且和原來的變量同名。

靜態類型語言這樣的設計并不是為了為難你,而是為了方便 CPU 運行而這樣設計的。因為最終都需要將所有操作都對應為簡單的二進制操作,因此必須將對象、類型這些高級的數據結構轉換為低級數據結構。

Python 也實現了這樣的轉換,但用戶看不到這些轉換,也不需要關心這些轉換。

不用必須聲明類型并不是為了使 Python 運行慢,Python 的設計是讓用戶可以讓各種東西變得動態:可以在運行時更改對象上的方法,也可以在運行時動態添加底層系統調用到值的聲明上,幾乎可以做到任何事。

但也正是這種設計使得 Python 的優化異常的難。

為了證明我的觀點,我使用了一個 Mac OS 上的系統調用跟蹤工具 DTrace。CPython 發布版本中沒有內置 DTrace,因此必須重新對 CPython 進行編譯。以下以 Python 3.6.6 為例:

  1. wget https://github.com/python/cpython/archive/v3.6.6.zip
  2. unzip v3.6.6.zip
  3. cd v3.6.6
  4. ./configure --with-dtrace
  5. make

這樣 python.exe 將使用 DTrace 追蹤所有代碼。Paul Ross 也作過關于 DTrace 的閃電演講。你可以下載 Python 的 DTrace 啟動文件來查看函數調用、執行時間、CPU 時間、系統調用,以及各種其它的內容。

  1. sudo dtrace -s toolkit/<tracer>.d -c ‘../cpython/python.exe script.py

py_callflow 追蹤器顯示了程序里調用的所有函數。

那么,Python 的動態類型會讓它變慢嗎?

  • 類型比較和類型轉換消耗的資源是比較多的,每次讀取、寫入或引用變量時都會檢查變量的類型
  • Python 的動態程度讓它難以被優化,因此很多 Python 的替代品能夠如此快都是為了提升速度而在靈活性方面作出了妥協
  • Cython 結合了 C 的靜態類型和 Python 來優化已知類型的代碼,它可以將性能提升 84 倍

總結

由于 Python 是一種動態、多功能的語言,因此運行起來會相對緩慢。對于不同的實際需求,可以使用各種不同的優化或替代方案。

例如可以使用異步,引入分析工具或使用多種解釋器來優化 Python 程序。

對于不要求啟動時間且代碼可以充分利用 JIT 的程序,可以考慮使用 PyPy。

而對于看重性能并且靜態類型變量較多的程序,不妨使用 Cython

 

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2024-04-03 09:23:31

ES索引分析器

2018-08-16 08:03:21

Python語言解釋器

2023-09-08 08:35:42

層疊樣式表CSS

2023-03-09 08:23:07

序列化?接口方法

2023-06-26 08:20:02

openapi格式注解

2023-11-02 10:22:29

gRPC后端通信

2014-07-15 11:05:30

黑莓

2024-12-02 12:34:06

2020-08-14 09:11:29

RedisQPS數據庫

2016-12-28 11:28:19

.NET反射

2021-05-29 06:23:47

webpack esbuild

2020-08-13 09:19:10

Kafka存儲MQ

2022-06-30 08:01:53

mysqlmyisamcount

2019-12-09 10:29:04

Go語言開發互聯網

2025-06-20 04:55:00

Wi-Fi組網CSSR

2015-09-09 11:04:28

Wi-Fi網速

2021-10-13 09:00:19

排序數據集開發

2021-03-18 14:34:34

達達集團京東云電商

2016-03-16 10:43:08

項目時間

2013-06-24 10:05:40

點贊
收藏

51CTO技術棧公眾號

欧美成人网在线| 色综合久久久久久久久| 91在线高清免费观看| 欧美色图亚洲视频| 91久久精品无嫩草影院| 亚洲一区二区三区国产| 国产精品污www一区二区三区| 日本三级午夜理伦三级三| 久久久久影视| 日本韩国精品在线| 一区二区视频在线播放| 高清国产mv在线观看| 国产精品入口66mio| 亚洲色无码播放| 九九九九九国产| 污片在线免费观看| 成人动漫一区二区在线| 国产精品扒开腿做| av成人免费网站| 国产精品亚洲一区二区在线观看| 亚洲午夜视频在线观看| 蜜桃视频日韩| 精品人妻少妇AV无码专区 | 欧美日韩一级视频| 黄色网zhan| 少妇人妻精品一区二区三区| 人禽交欧美网站| 久久久久久成人| 国产破处视频在线观看| 精品女人视频| 欧美久久婷婷综合色| 成年人看的毛片| 在线观看av的网站| 国产一区亚洲一区| 日韩美女写真福利在线观看| 一区二区三区四区五区| 神马久久av| 欧美一区二区精品| 欧美日韩亚洲一二三| 91麻豆免费在线视频| 中文字幕免费在线观看视频一区| 成人av电影免费| 中文字幕欧美色图| 亚洲免费中文| 国内精品国产三级国产在线专 | 欧美a级大片在线| 一本久久综合亚洲鲁鲁五月天| 伊人再见免费在线观看高清版| 欧洲免费在线视频| 99视频精品免费视频| 亚洲一区二区三区四区在线播放| 日韩综合在线观看| 亚洲人www| 中文字幕av一区中文字幕天堂| 免费黄色三级网站| 日韩中文在线| 欧美日韩电影在线播放| www.日本xxxx| 欧美精品高清| 色综合天天在线| 欧美三级一级片| 欧洲在线视频| 亚洲啪啪综合av一区二区三区| 神马影院午夜我不卡影院| 精品久久久中文字幕人妻| 久久99精品国产麻豆婷婷| 国产精品91视频| 亚洲精品成人在线视频| 国产精品久久久久9999高清| 韩国19禁主播vip福利视频| 国产精品免费人成网站酒店| 精品久久综合| 在线免费观看羞羞视频一区二区| x88av在线| 青青青国产在线视频| 中文字幕一区二区久久人妻| 老司机精品导航| 青青草精品毛片| 国产尤物在线视频| 免费亚洲一区| 国产精品h片在线播放| 日韩黄色一级视频| 欧美aaa在线| 成人黄色中文字幕| 懂色av蜜臀av粉嫩av分享吧最新章节| 亚洲综合好骚| 日本免费久久高清视频| 91午夜精品亚洲一区二区三区| 天堂在线亚洲视频| 国产精品久久久久久五月尺| 最新中文字幕在线观看视频| 麻豆成人久久精品二区三区红| 国产精品综合网站| 国产三级理论片| 另类小说一区二区三区| 动漫精品视频| 青青久在线视频| 国产日韩欧美精品电影三级在线 | 伊人成综合网伊人222| 欧美精品一区二区三区蜜桃视频 | 日韩激情欧美| 精品国产一区二区亚洲人成毛片| 国产精品麻豆入口| 成人精品视频| 欧美日本高清一区| 日韩黄色一级大片| 日本欧美在线看| 亚洲在线视频福利| 亚洲日本国产精品| 国产精品免费观看视频| 日本wwwcom| 欧美三级精品| 日韩美女一区二区三区四区| 素人fc2av清纯18岁| 久久只有这里有精品| 亚洲人成网站77777在线观看| 亚洲天堂男人天堂女人天堂| www深夜成人a√在线| 亚洲精品极品| 国产自摸综合网| 香蕉视频黄色片| 亚洲欧洲性图库| www黄色日本| 亚洲老司机网| 欧美精品一区二区蜜臀亚洲| a天堂中文字幕| 欧美另类专区| 51ⅴ精品国产91久久久久久| 国产精品自拍电影| 久久久久久久综合色一本| 91制片厂免费观看| 中文不卡1区2区3区| 欧美日本在线播放| 国产精品无码专区| 综合日韩在线| 国产福利成人在线| 特黄aaaaaaaaa真人毛片| 亚洲欧洲av在线| 无码人妻丰满熟妇区毛片| 亚洲精品aa| 亚洲人午夜精品| 日本少妇xxxx动漫| 久久成人麻豆午夜电影| 欧美日韩电影一区二区三区| 一区二区三区伦理| 欧美色综合影院| 三叶草欧洲码在线| 午夜精品久久久久99热蜜桃导演| 国产成人+综合亚洲+天堂| 人妻91麻豆一区二区三区| 日韩一区在线免费观看| 91香蕉视频导航| 黄色不卡一区| 国产精品久久久久av| 国产女人在线视频| 欧美最猛性xxxxx直播| 欧亚乱熟女一区二区在线| 欧美日韩中文| 成人高清在线观看| 欧美女同一区| 亚洲福利视频在线| xxxxxx国产| jvid福利写真一区二区三区| 熟女熟妇伦久久影院毛片一区二区| 蜜桃视频在线观看免费视频| 日韩精品一区二| 久久这里只有精品免费| 捆绑调教美女网站视频一区| 欧美亚州在线观看| 另类中文字幕国产精品| 国产亚洲人成a一在线v站| 真实的国产乱xxxx在线91| 中文字幕免费不卡在线| 天天操天天摸天天爽| 欧美午夜精彩| 91精品久久久久久久久久| 最近高清中文在线字幕在线观看| 欧美视频在线观看一区二区| 久久免费手机视频| 久久99久久99精品免视看婷婷| 蜜桃精品久久久久久久免费影院 | 免费的成人av| 国产精品99久久久久久大便| 成人国产一区二区三区精品麻豆| 日韩在线观看免费av| www.久久久久久久久久| 精品久久久久久久久久久久久| 中文字幕第88页| 91精品国产自产在线观看永久∴| 亚洲最大av网站| 超碰中文在线| 亚洲日本欧美日韩高观看| 一区二区视频免费| 亚洲激情校园春色| 亚洲一区二区在线免费| 老司机午夜精品视频在线观看| 亚洲精品二区| 日韩一区二区三区免费视频| 精品国产区一区二区三区在线观看| 国产夫绿帽单男3p精品视频| 天天色 色综合| 一级黄色性视频| 国产成人在线看| 欧美牲交a欧美牲交aⅴ免费下载| 成人激情免费视频| y111111国产精品久久婷婷| 亚洲精品88| 久久夜色精品国产| 色呦呦中文字幕| 欧美午夜精品在线| 午夜国产福利视频| 国产·精品毛片| 成人免费观看毛片| 精品91在线| 一区二区日本| 秋霞蜜臀av久久电影网免费| 国产精品高潮呻吟久久av黑人| 污污片在线免费视频| 亚洲人成欧美中文字幕| 99久久婷婷国产一区二区三区| 一本久久a久久精品亚洲| 国产第一页在线播放| 一区在线播放视频| 林心如三级全黄裸体| 91丨九色丨尤物| 亚洲av无码一区东京热久久| 韩国一区二区三区| 香蕉视频禁止18| 久久一区二区三区四区五区| av免费观看大全| 国产一区二区中文| 亚洲小视频在线播放| 99久久精品网站| 亚洲免费精品视频| 国产欧美高清视频在线| 欧美日韩电影一区二区| 婷婷精品在线观看| 久久综合福利| 欧洲亚洲成人| 精品在线一区| 精品亚洲自拍| 狠狠爱一区二区三区| 亚洲三级av| 国产精品大全| 99久热这里只有精品视频免费观看| 亚洲va国产va天堂va久久| 亚洲伦理久久| 91久久精品一区| 91精品视频一区二区| 成人欧美在线视频| 懂色av色香蕉一区二区蜜桃| 成人黄色免费片| 国产日韩一区二区三免费高清| 91丨九色丨国产在线| 日韩欧美中文在线观看| 91视频免费进入| eeuss国产一区二区三区四区| 都市激情久久久久久久久久久| 7777精品| 久99久视频| 国产探花在线精品一区二区| 日韩经典在线视频| 成人在线亚洲| 警花观音坐莲激情销魂小说| 欧美成人综合| 欧美日韩黄色一级片| 校园春色综合网| 午夜在线观看av| 韩国成人福利片在线播放| 国产成人av免费观看| av在线免费不卡| 精品人妻一区二区三区视频| 国产农村妇女毛片精品久久麻豆| 人妻无码一区二区三区免费| 亚洲免费观看高清| 欧美日韩综合在线观看| 动漫精品一区二区| 在线免费观看中文字幕| 日韩亚洲欧美一区二区三区| 天堂中文在线看| 中文字幕免费精品一区| 羞羞的视频在线看| 日本欧美中文字幕| 亚洲欧洲日韩精品在线| 国产一区不卡在线观看| av一区二区在线播放| 黄色录像特级片| 久久久夜夜夜| 手机av在线网站| 久久色中文字幕| 日本a级片视频| 色婷婷综合久色| 国产黄色av网站| 精品亚洲一区二区三区在线观看| 91最新在线| 韩国v欧美v日本v亚洲| 素人啪啪色综合| 国产一区二区免费电影| 日韩欧美中字| 免费无码不卡视频在线观看| 日本v片在线高清不卡在线观看| 亚洲视频在线不卡| 91免费国产视频网站| 欧美亚洲日本在线| 欧美在线免费视屏| 手机看片福利在线| 日韩中文字幕在线播放| 日本а中文在线天堂| 亚洲精品女av网站| 精品视频免费在线观看| 青青青免费在线| 国产在线视频不卡二| 久久久久久久久久久久| 亚洲国产裸拍裸体视频在线观看乱了 | 91精品国产91久久久久久久久| 欧洲亚洲精品| 欧美下载看逼逼| 国产精品久久国产愉拍| 国产调教打屁股xxxx网站| 中文一区在线播放| 五月婷婷中文字幕| 欧美成人vr18sexvr| 免费观看成人高潮| 国产精品久久久久久久7电影| 啪啪激情综合网| 波多野结衣综合网| 国产成人精品一区二区三区网站观看| 国产又粗又硬视频| 日韩欧美成人精品| 无码精品视频一区二区三区 | 91日韩中文字幕| 欧美日韩大陆在线| 成人精品一区二区三区校园激情| 4438全国成人免费| 日韩啪啪网站| 国产极品在线视频| av影院午夜一区| 麻豆一区二区三区精品视频| 日韩欧美精品三级| av免费在线免费| 亚洲伊人第一页| 五月天综合网站| 狠狠干狠狠操视频| 亚洲欧洲日产国码二区| 91黄色在线视频| 日韩中文字幕网站| 久久久国产精品网站| 水蜜桃一区二区| 日本成人中文字幕| 永久免费av无码网站性色av| 欧洲av一区二区嗯嗯嗯啊| 国产精品一二三区视频| 国产精品99久久久久久人| 国内精品伊人久久久| 欧美三级午夜理伦三级富婆| 国产精品日韩成人| 国产美女裸体无遮挡免费视频| 久久精品欧美视频| 午夜日韩影院| 和岳每晚弄的高潮嗷嗷叫视频| gogogo免费视频观看亚洲一| 久草视频在线观| 亚洲乱码av中文一区二区| 吞精囗交69激情欧美| 水蜜桃亚洲精品| 国产在线播放一区二区三区| 久草视频在线资源| 亚洲成人xxx| 丝袜美腿一区| 99热一区二区三区| 成人看片黄a免费看在线| 久久久久久久久久影院| 一区二区三区美女xx视频| 91精品亚洲一区在线观看| 久久亚洲a v| 久久只精品国产| 亚洲性在线观看| 欧美日韩爱爱视频| 丝袜久久网站| 国产三级三级看三级| 一区二区成人在线视频| 日韩一二三四| 成人激情电影一区二区| 99热免费精品在线观看| 久久久精品成人| 欧美成人午夜电影| 影视一区二区三区| 99久热在线精品视频| 91蜜桃在线观看| 91美女精品网站| 2019亚洲男人天堂| 66国产精品| 加勒比一区二区| 91精品综合久久久久久| 成人小电影网站| 日本丰满大乳奶| 国产日韩欧美一区二区三区综合| 精品久久久久中文慕人妻| 国产999在线观看| 国产精品成人一区二区网站软件|