python虛擬機解釋器及運行過程

python虛擬機解釋器

我閑來翻瞭翻幾年前就買的一本python的書,O'REILLY的【python學習手冊】,中譯版,很厚。

可惜,我看得非常少,這也是為什麼我在簡歷上關於python頂天也就寫個熟悉,就這都擔心找虐。雖說java的學習價值更大,但是學瞭平時用不上,忘得快。再加上做題的時候,感覺還是用python來得更得心應手些(廢話,別的你也不熟啊),於是我決定把書看完,記錄出以前不知道的,或者忽視掉的知識細節。

什麼是python解釋器

1. 解釋性語言和編譯性語言

說到解釋器,大傢之前多少都聽過解釋性語言和編譯性語言。首先,不管是這二位其中的誰,源代碼對於計算機來說,都是讀不懂的,計算機隻認識二進制指令。所以,想讓程序被執行,那麼自然要先把源代碼轉化為二進制指令,也就是機器碼。

那麼,在什麼時候進行轉換呢?

有的語言要求必須提前把代碼一次性轉換完畢,這種就是編譯型語言,用的轉換工具就叫編譯器,比如C語言、C++。有的語言則可以一邊執行一邊轉化,用到哪裡瞭就轉哪裡,這種就是解釋性語言,用的轉化工具叫解釋器,比如python、javascript。

java比較特殊,既有編譯又有解釋。但是編譯並沒有直接編譯成機器碼,而是編譯成字節碼,然後再拿到虛擬機中執行。這種設計初衷是在跨平臺的同時兼顧執行效率,這裡就不展開瞭。

ok,上面就是鋪墊瞭。

2. python解釋器

python解釋器是一種讓其他程序運行起來的程序,編寫的python代碼必須在解釋器中運行,這東東已經在我們安裝python的時候都裝上瞭。
所以,現在我print(hello world),就可以運行瞭,控制臺可以看到文本的輸出。

3. python程序運行過程

上面的一行代碼雖然簡單,但是python運行它還是經過瞭兩步操作:

將源代碼編譯成為“字節碼”轉發“字節碼”到“虛擬機”

字節碼編譯

可以理解為翻譯,把print(hello world)翻譯成字節碼,字節碼會保存在後綴名是.pyc的文件裡,這文件其實就是編譯後的.py源代碼。

這些字節碼相較於源代碼,運行起來速度要快得多。為什麼?

因為在下一次運行程序時,如果在上次保存瞭字節碼之後沒有修改過源代碼瞭,Python就會加載.pyc文件並且跳過編譯這個步驟。

當必須要重新編譯時,python會自動檢查源文件和字節碼文件的時間戳,如果你又保存瞭源代碼,下次程序運行時,字節碼將自動重新創建。

python虛擬機

Python Virtual Machine,簡寫為PVM,當有字節碼文件之後,就會被發送到PVM裡來執行。

這裡註意,PVM並不是指的一個獨立的程序,是不需要安裝的。可以把PVM理解為Python的運行引擎,是一個迭代運行字節碼指令的大循環,一個個的完成操作,直到結束。
從技術角度看,PVM才是“解釋器”的最後一步。

關於python的性能

大傢都知道,python的缺點是運行慢。但其實這裡的慢也隻是相對而言,跟C和C++這類編譯性語言相比,確實執行速度還不夠快。

為什麼?

上述也提到瞭python會把源代碼轉成字節碼,然後再將字節碼解釋出來。但是為瞭更好的跨平臺性,這裡的字節碼是一種跟平臺無關的格式,所以並不是底層的二進制代碼。到目前為止,隻要不是對運行速度有嚴苛要求的領域,比如數值計算或動畫這種,經常需要核心處理單元至少以C語言的速度執行,絕大多數的應用,python還是可以勝任的。

相比於缺點,python帶來開發效率的提升,相信也是很多人喜愛的的重要因素。

以上就是python虛擬機解釋器及運行過程的詳細內容,更多關於python虛擬機解釋器的資料請關註WalkonNet其它相關文章!

推薦閱讀: