編程學習網 > 編程教程 > PHP7 教程
2015
09-14

PHP7性能提升思考

清華大佬耗費三個月吐血整理的幾百G的資源,免費分享!....>>>

時下不少人拿PHP7的高性能與HHVM來做比較,那么問題來了:隨著PHP7性能的提升,我們能預測出未來PHP這門語言會用PHP寫出來么?

Mattsah的觀點:


對解釋型語言來說,有用語言本身來重寫這門語言的其他實例么?我認為即使有這樣的實例,在這個環境下,這門語言的某些部分必定是不可用的。
Otterfan:
最經典的實例就是PyPy,這是一個用RPython(Python的一個子集)寫出來的Python解釋器和實時編譯器。
Mattsah:
雖然對Python不是很熟悉,但我不得不考慮下(如有誤歡迎更正),這樣一來它的動態性能或者說某些特性是不是會受到限制?
Otterfan:
實際上并沒有。它基本上能與Python 2.7.8和Python 3.2.5兼容,甚至它有時候比規范的Python(CPython)運行的還要快。
實際上的過程是這樣的:Rpython通過PyPy的RPython工具鏈被翻譯成C版本,然后這個C版本被編譯為二進制機器碼,接著用戶層的Python就會運行在這個二進制機器碼上。你當然也可以在規范的CPython解釋器之上來運行PyPy解釋器,不過這樣子PyPy會運行的很慢。
PyPy同樣也是一個實時編譯器,這才是PyPy通常能產生出甚至比CPython還要快的代碼的真正原因,代價只是啟動的時候稍微有點延遲。PHP則不會有像Python Web開發的這個缺點,因為Python Web應用是一次性就全部啟動并開始運行,而不是像PHP一樣響應每個請求才開始逐步啟動。
 

Chippiewall的觀點:

你不可能在沒有一個解釋器來運行的前提下寫出一個解釋型語言的解釋器。
Ircmaxell的評論:
這個觀點嚴格意義上是不對的。
另外更正一點,PHP并不是一門解釋型語言,而是一門編譯型語言。
明白了這一點,就很不一樣了。是的,編譯器并不會產生出原生的機器碼,但還是存在這么一個編譯器的。并且虛擬機使用的每個單獨的操作在理論上都會被產生的機器碼所代替。看看Zend’s “JIT”編譯器吧,它根本就不是一個實時編譯器,而是一個AOT編譯器。很準確地說,它能產生出原生的機器碼而不是虛擬機代碼(但有相同的語義)。
所以如果拿一個用PHP(Recki-CT或PHPPHP)寫的編譯器,我們是能夠用它來編譯自身的。這就意味著,只要我們引導它一次,我們就不再需要“編譯器”(虛擬機)了。
所以,Chippiewall的觀點是不對的。

掃碼二維碼 獲取免費視頻學習資料

編程學習