偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

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

開發(fā) 前端
在這篇文章中,我將介紹Python的不同特性,我們將了解為什么這使其成為當(dāng)今最完整的語言之一,但速度不夠快。

在編程社區(qū)中,眾所周知Python編程語言在速度方面并不占優(yōu)勢。

"但是就是慢..."

在這篇文章中,我將介紹Python的不同特性,我們將了解為什么這使其成為當(dāng)今最完整的語言之一,但速度不夠快。但首先,讓我們掌握一些關(guān)于編程語言的基本知識。

抽象級別

正如我們可能知道的那樣,編程語言通常根據(jù)其抽象級別進行描述。

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

抽象級別(從硬件到現(xiàn)代編程語言)

C++、PHP、Java、Python等都被認為是現(xiàn)代(或高級)編程語言,因為它們可以在幾乎任何類型的系統(tǒng)上運行。在匯編語言中,我們必須根據(jù)每個特定處理器的指令編寫不同的程序(無法在不同的CPU上運行相同的代碼)。例如,如果我們創(chuàng)建一個打印“Hello world”的程序并將代碼發(fā)送給我們的朋友(他有不同的計算機型號),當(dāng)他嘗試執(zhí)行它時,它可能會失敗。

現(xiàn)代語言:金字塔的最后抽象層

現(xiàn)代語言抽象

盡管是離機器碼最高的抽象,但在金字塔的最后一層也有層次結(jié)構(gòu)。一方面,我們可以找到過程化語言,如C,我們需要逐步知道自己在做什么。這具有非常高效的優(yōu)點,但缺點是復(fù)雜且不夠靈活。另一方面,其他語言通過讓我們使用更易讀和靈活的代碼來簡化任務(wù)。這就是Python的情況。我們幾乎可以用它做任何事情,而且易于實現(xiàn),但在某些任務(wù)上效率不高。

但為什么Python確切地說是“慢”呢?

讓我們回顧一些語言特性以回答這個問題。

解釋性語言

首先,Python是一種解釋性語言,這意味著代碼由軟件程序(稱為解釋器)逐行讀取和執(zhí)行,在運行時進行。這是將代碼轉(zhuǎn)換為機器代碼的一種方式。

編譯型語言

另一種使代碼“為機器可理解”的方式是通過編譯過程。在這種情況下,源代碼在實際在計算機上運行之前通過編譯器轉(zhuǎn)換為機器代碼。

編譯型與解釋型語言

為什么解釋性方式更慢?

在解釋性語言中,源代碼的每一行在執(zhí)行過程中都會即時轉(zhuǎn)換為機器代碼。這意味著每次程序運行時,解釋器必須解析、分析和執(zhí)行代碼,這增加了與直接運行預(yù)編譯機器代碼相比的開銷。例如:如果某段代碼運行多次(例如,在循環(huán)內(nèi)),解釋器必須每次遇到時讀取和轉(zhuǎn)換它。相反,編譯程序?qū)⒅苯舆\行機器代碼,無需在通過循環(huán)時重新翻譯它。

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

標(biāo)準的Python解釋器是CPython。它由C和Python編寫,將Python代碼編譯成字節(jié)碼,然后進行解釋。為了防止多個本機線程同時執(zhí)行Python字節(jié)碼,CPython使用全局解釋器鎖。這個鎖是必要的,因為CPython的內(nèi)存管理不是線程安全的。然而,在多線程程序中,它可能是一個顯著的瓶頸,限制了在多核處理器上進行多線程的性能提升。

全局解釋器鎖的工作流程

動態(tài)類型

此外,Python是動態(tài)類型的,這意味著在初始化變量時不需要聲明變量的類型。這對效率有何影響呢?嗯,在動態(tài)類型語言中,類型是在運行時確定的。這意味著解釋器需要在執(zhí)行代碼片段時進行類型檢查。這需要額外的處理來確定每個變量的類型以及根據(jù)這些類型執(zhí)行操作的方式。而動態(tài)類型語言的對立面是什么?

靜態(tài)類型語言

在這種情況下,變量的類型在編譯時而不是在運行時確定。因此,類型在編譯時已知,編譯器可以更激進地優(yōu)化代碼執(zhí)行。這導(dǎo)致更快但不夠靈活的程序。一些采用這種方法的語言包括C++和Rust。

靜態(tài)類型與動態(tài)類型語言

垃圾收集

垃圾收集是一種編程語言運行時系統(tǒng)用于回收程序不再使用的內(nèi)存的自動內(nèi)存管理形式。Python通過垃圾收集自動管理其對象的內(nèi)存分配和釋放。它使用的主要垃圾收集方法是引用計數(shù)。Python中的每個對象都有一個引用計數(shù),即指向它的引用數(shù)量。當(dāng)引用計數(shù)降至零,即不再有指向該對象的引用時,它會立即從內(nèi)存中刪除。

垃圾收集器的工作流程

然而,垃圾收集是一把雙刃劍...

它通過自動清理未使用的對象極大簡化了內(nèi)存管理,有助于防止由于手動內(nèi)存管理導(dǎo)致的內(nèi)存泄漏和其他錯誤。但它引入了開銷和不可預(yù)測性,可能影響應(yīng)用程序的性能。

責(zé)任編輯:趙寧寧 來源: 小白玩轉(zhuǎn)Python
相關(guān)推薦

2018-08-02 16:17:34

Python 開發(fā)編程語言

2022-09-23 15:07:32

東數(shù)西算數(shù)據(jù)中心IT

2020-03-31 14:40:24

HashMap源碼Java

2021-02-21 11:25:17

云計算IaaSPaaS

2019-05-22 09:50:42

Python沙箱逃逸網(wǎng)絡(luò)攻擊

2022-03-29 08:02:01

數(shù)字孿生能源程序

2021-02-08 22:23:16

云計算辦公硬件

2020-06-24 09:55:55

邊緣計算開發(fā)數(shù)據(jù)中心

2016-08-18 00:21:12

網(wǎng)絡(luò)爬蟲抓取網(wǎng)絡(luò)

2024-08-12 12:30:27

2021-08-02 06:56:19

TypeScript編程語言編譯器

2025-01-20 09:15:00

iOS 18.3蘋果iOS 18

2021-07-06 08:59:38

頁緩存PageCache

2019-07-01 09:22:15

Linux操作系統(tǒng)硬件

2021-06-23 16:05:05

鴻蒙HarmonyOS應(yīng)用

2025-03-25 09:06:11

2024-10-10 17:55:57

LinuxACL訪問控制列表

2022-04-26 13:41:16

區(qū)塊鏈比特幣數(shù)據(jù)庫

2023-04-10 11:35:31

評估模型業(yè)務(wù)流程

2022-12-07 07:38:07

存儲管理HSM
點贊
收藏

51CTO技術(shù)棧公眾號