首頁  >  文章  >  後端開發  >  為什麼C程式碼比Python的運行速度更快?

為什麼C程式碼比Python的運行速度更快?

PHPz
PHPz轉載
2023-09-11 12:45:02948瀏覽

為什麼C程式碼比Python的運行速度更快?

在本文中,我們將了解為什麼 C 語言程式碼運行速度比 Python 更快。

Guido Van Rossum 開發了 Python,這是最有名的程式語言之一。 Python因其清晰的語法和簡單的程式碼而受到開發人員的歡迎,即使對於新手來說也是如此。學習Python對於那些剛開始程式設計職業生涯的人來說是非常有利的。他們可以使用 Python 程式設計培訓、部落格、影片、模組和數千種其他資源來了解這種流行語言的各個方面。完成後,您將能夠進行現代開發活動,例如 GUI 開發、網頁設計、系統管理、複雜的金融交易或計算、數據科學、視覺化等等。

Python 比 C 慢,因為它是一種解釋語言。

Python 比 C 慢,因為它是一種解釋性語言。

因此,需要更多真實的 CPU 指令來執行給定的語句。

您可以透過在 Python 程式碼中加入數字 1 或將其與給定值進行比較來驗證變數的值是否小於、大於或精確等於該值。

不同之處在於,Python 程式碼不會立即由 CPU 執行,而是會被解釋。

就性能而言,這使世界變得與眾不同。

幾乎總是使用虛擬機器來運行 Python 程式碼

虛擬電腦的另一個名稱是「字節碼解釋器」。

解釋程式碼總是比實際機器碼慢,因為它需要比執行實際機器指令更多的指令來實作指令。

範例

考慮表達式 x = 1。在 Intel CPU 中,暫存器增量是單一操作,延遲為 1,吞吐量倒數為三分之一 (1/3)。

換句話說,它指的是英特爾處理器可以提供的最快的CPU指令。

在Python中,x = 1是如何實現的?

要理解這一點,您必須先了解 Python 內部是如何運作的。

Python 的內部元件包括分詞器、詞法分析器、字節碼產生器和字節碼解釋器 -

  • Tokenizer - 它根據給定的 ASCII 文字檔案(Python 程式碼)建立令牌流。

  • 詞法分析器 - Python 的這個區域涉及適當的縮排和間距。此時進行語法檢查。

  • 字節碼產生器 - 如果進行了任何最佳化,則它們是由Python 元件進行的;但是,由於Python 不是編譯語言,因此與C 編譯器相比,可用優化的範圍受到限制。

  • 被稱為「字節碼解釋器」的 Python 模組管理字節碼流並為 Python 虛擬機器提供動力(維護其狀態)。

字節碼一旦生成,通常會快取在記憶體中。

因為您不必對 Python 已經見過的程式碼重複標記化、詞法分析和字節碼產生過程,所以這提高了速度。

因此,我們不必每次循環 while 循環時都經歷標記化、詞法分析和字節碼創建過程,而是可以繼續將字節碼傳遞給字節碼解釋器。

這不是更快嗎? 不,實際上並非如此。

雖然使用快取的字節碼速度更快,但它的執行或操作速度不如機器碼。

運行程式碼的真實CPU不是虛擬電腦。

編譯過程

編譯型 UCSD Pascal 與當時的其他編譯語言不同,並未編譯為組合語言。相反,它被編譯成 p 程式碼。

因此,當您想到「編譯的 Pascal 程式」時,您會想到 p-Code。如果您喜歡 Java 或 Python 並且想假裝您想出了一些新東西,請使用「字節碼」。

此外,Python 還包括「編譯的Python」的概念,它指的是經過分詞器、詞法分析器和字節碼產生器處理以創建可提供給字節碼解釋器的快取字節碼的Python 程式碼(又稱Python 虛擬機器)。

當您看到擴展名為.py的檔案時,它是一個包含Python原始碼的ASCII文字檔案。

PYthon,已編譯是帶有「.pyc」副檔名的檔案所代表的內容。

仍然,虛擬計算機執行已建立的程式碼。

本機程式碼

程式一旦建置完成,就不會完全轉換為本機程式碼,直到它被轉換為其設計平台的本機二進位 CPU 指令。

這通常涉及編寫彙編程式碼,將其傳遞給彙編器,然後讓彙編器建立特定於平台的目標文件,而不是使用字節碼。

在程式連接到平台運行時之前,它尚未準備好使用。運行時可以提供動態物件載入等運行時服務並建置程式碼執行的環境。在已編譯的 C 中,存在運行時。已編譯的C 具有運行時。

為什麼Python比C慢?

  • Python 執行大量的健全性檢查- 整數永遠不會溢出,無效記憶體永遠不會被訪問,類型永遠不會(默默地)不正確,並且數組永遠不會超出其末端進行寫入或讀取。在 Python 中,很難出現“非本地錯誤”,但在 C 中,出現並非實際報告錯誤的錯誤是相當常見的。

  • Python 的編譯器不會進行非常高級的最佳化(如果有的話) - 一方面,速度不像C 中那麼重要,而且沒有那麼多資訊可以繼續- 例如,在Common Lisp(另像Python 一樣的動態語言)中,您可以提供類型註釋以獲得與C 相同的速度- 如果您選擇退出安全檢查並承諾某些變數將具有某些類型,您將獲得完全相同的機器碼指令(如果你的程式中有錯誤,也會出現完全相同的奇怪行為)。

結論

在本文中,我們了解了 C 語言程式碼執行速度比 Python 更快的不同原因。

以上是為什麼C程式碼比Python的運行速度更快?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除