日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

一文看懂,為什么 Python 運行速度如此慢?

來源: 責編: 時間:2024-06-05 17:43:15 187觀看
導讀在編程社區中,眾所周知Python編程語言在速度方面并不占優勢。"但是就是慢..."在這篇文章中,我將介紹Python的不同特性,我們將了解為什么這使其成為當今最完整的語言之一,但速度不夠快。但首先,讓我們掌握一些關于編程語言

在編程社區中,眾所周知Python編程語言在速度方面并不占優勢。ApL28資訊網——每日最新資訊28at.com

"但是就是慢..."ApL28資訊網——每日最新資訊28at.com

在這篇文章中,我將介紹Python的不同特性,我們將了解為什么這使其成為當今最完整的語言之一,但速度不夠快。但首先,讓我們掌握一些關于編程語言的基本知識。ApL28資訊網——每日最新資訊28at.com

ApL28資訊網——每日最新資訊28at.com

ApL28資訊網——每日最新資訊28at.com

抽象級別

正如我們可能知道的那樣,編程語言通常根據其抽象級別進行描述。ApL28資訊網——每日最新資訊28at.com

  • 低抽象級別表明該語言更接近硬件(難以解釋)
  • 高級別表示代碼更接近用戶(易于解釋)。

ApL28資訊網——每日最新資訊28at.com

抽象級別(從硬件到現代編程語言)ApL28資訊網——每日最新資訊28at.com

C++、PHP、Java、Python等都被認為是現代(或高級)編程語言,因為它們可以在幾乎任何類型的系統上運行。在匯編語言中,我們必須根據每個特定處理器的指令編寫不同的程序(無法在不同的CPU上運行相同的代碼)。例如,如果我們創建一個打印“Hello world”的程序并將代碼發送給我們的朋友(他有不同的計算機型號),當他嘗試執行它時,它可能會失敗。ApL28資訊網——每日最新資訊28at.com

ApL28資訊網——每日最新資訊28at.com

現代語言:金字塔的最后抽象層

ApL28資訊網——每日最新資訊28at.com

ApL28資訊網——每日最新資訊28at.com

現代語言抽象ApL28資訊網——每日最新資訊28at.com

盡管是離機器碼最高的抽象,但在金字塔的最后一層也有層次結構。一方面,我們可以找到過程化語言,如C,我們需要逐步知道自己在做什么。這具有非常高效的優點,但缺點是復雜且不夠靈活。另一方面,其他語言通過讓我們使用更易讀和靈活的代碼來簡化任務。這就是Python的情況。我們幾乎可以用它做任何事情,而且易于實現,但在某些任務上效率不高。ApL28資訊網——每日最新資訊28at.com

ApL28資訊網——每日最新資訊28at.com

但為什么Python確切地說是“慢”呢?ApL28資訊網——每日最新資訊28at.com

ApL28資訊網——每日最新資訊28at.com

讓我們回顧一些語言特性以回答這個問題。ApL28資訊網——每日最新資訊28at.com

ApL28資訊網——每日最新資訊28at.com

解釋性語言

首先,Python是一種解釋性語言,這意味著代碼由軟件程序(稱為解釋器)逐行讀取和執行,在運行時進行。這是將代碼轉換為機器代碼的一種方式。ApL28資訊網——每日最新資訊28at.com

ApL28資訊網——每日最新資訊28at.com

編譯型語言

另一種使代碼“為機器可理解”的方式是通過編譯過程。在這種情況下,源代碼在實際在計算機上運行之前通過編譯器轉換為機器代碼。ApL28資訊網——每日最新資訊28at.com

ApL28資訊網——每日最新資訊28at.com

ApL28資訊網——每日最新資訊28at.com

編譯型與解釋型語言ApL28資訊網——每日最新資訊28at.com

為什么解釋性方式更慢?

在解釋性語言中,源代碼的每一行在執行過程中都會即時轉換為機器代碼。這意味著每次程序運行時,解釋器必須解析、分析和執行代碼,這增加了與直接運行預編譯機器代碼相比的開銷。例如:如果某段代碼運行多次(例如,在循環內),解釋器必須每次遇到時讀取和轉換它。相反,編譯程序將直接運行機器代碼,無需在通過循環時重新翻譯它。ApL28資訊網——每日最新資訊28at.com

ApL28資訊網——每日最新資訊28at.com

CPython及其全局解釋器鎖(GIL)

標準的Python解釋器是CPython。它由C和Python編寫,將Python代碼編譯成字節碼,然后進行解釋。為了防止多個本機線程同時執行Python字節碼,CPython使用全局解釋器鎖。這個鎖是必要的,因為CPython的內存管理不是線程安全的。然而,在多線程程序中,它可能是一個顯著的瓶頸,限制了在多核處理器上進行多線程的性能提升。ApL28資訊網——每日最新資訊28at.com

ApL28資訊網——每日最新資訊28at.com

ApL28資訊網——每日最新資訊28at.com

全局解釋器鎖的工作流程ApL28資訊網——每日最新資訊28at.com

ApL28資訊網——每日最新資訊28at.com

動態類型

此外,Python是動態類型的,這意味著在初始化變量時不需要聲明變量的類型。這對效率有何影響呢?嗯,在動態類型語言中,類型是在運行時確定的。這意味著解釋器需要在執行代碼片段時進行類型檢查。這需要額外的處理來確定每個變量的類型以及根據這些類型執行操作的方式。而動態類型語言的對立面是什么?ApL28資訊網——每日最新資訊28at.com

ApL28資訊網——每日最新資訊28at.com

靜態類型語言

在這種情況下,變量的類型在編譯時而不是在運行時確定。因此,類型在編譯時已知,編譯器可以更激進地優化代碼執行。這導致更快但不夠靈活的程序。一些采用這種方法的語言包括C++和Rust。ApL28資訊網——每日最新資訊28at.com

ApL28資訊網——每日最新資訊28at.com

ApL28資訊網——每日最新資訊28at.com

靜態類型與動態類型語言ApL28資訊網——每日最新資訊28at.com

ApL28資訊網——每日最新資訊28at.com

垃圾收集

垃圾收集是一種編程語言運行時系統用于回收程序不再使用的內存的自動內存管理形式。Python通過垃圾收集自動管理其對象的內存分配和釋放。它使用的主要垃圾收集方法是引用計數。Python中的每個對象都有一個引用計數,即指向它的引用數量。當引用計數降至零,即不再有指向該對象的引用時,它會立即從內存中刪除。ApL28資訊網——每日最新資訊28at.com

ApL28資訊網——每日最新資訊28at.com

ApL28資訊網——每日最新資訊28at.com

垃圾收集器的工作流程ApL28資訊網——每日最新資訊28at.com

ApL28資訊網——每日最新資訊28at.com

然而,垃圾收集是一把雙刃劍...ApL28資訊網——每日最新資訊28at.com

它通過自動清理未使用的對象極大簡化了內存管理,有助于防止由于手動內存管理導致的內存泄漏和其他錯誤。但它引入了開銷和不可預測性,可能影響應用程序的性能。ApL28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-92126-0.html一文看懂,為什么 Python 運行速度如此慢?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: C# new 關鍵字的三種用法

下一篇: 模擬實現.NET中的Task機制:探索異步編程的奧秘

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 巩留县| 泗水县| 娱乐| 吐鲁番市| 巴彦淖尔市| 旬邑县| 佛坪县| 礼泉县| 台湾省| 邹平县| 阜康市| 麦盖提县| 日照市| 新田县| 罗源县| 广河县| 长沙县| 苗栗市| 招远市| 甘谷县| 隆化县| 沂水县| 祁门县| 湘乡市| 遂平县| 富源县| 台东县| 客服| 英超| 读书| 德格县| 晴隆县| 康马县| 周口市| 北辰区| 东源县| 勃利县| 蒲江县| 上饶县| 会宁县| 东明县|