官方確認PHP 8將支持JIT即時編譯執行特性

一直以來,大家都在討論 PHP 8 中是否會支持 JIT(Just-In-Time)即時編譯執行功能,最新消息是官方已經確認將其引入。

PHP 實現了一個虛擬機 Zend VM,它會將人類可讀腳本編譯成虛擬機理解的指令,也就是操作碼,這個執行階段就是“編譯時(Compile Time)”。在“運行時(Runtime)”執行階段,虛擬機 Zend VM 會執行這些編譯好的操作碼。

通常編譯時與運行時兩個階段是獨立分開的,腳本編譯完成後,像 APC 與 OPCache 這樣的字節碼緩存組件會緩存這些操作碼。而 JIT 去掉了編譯時階段,它將這編譯時與運行時兩個階段合爲一體,實現即時編譯與執行。

JIT 是一種編譯器策略,它將代碼表述爲一種中間狀態,在運行時將其轉換爲依賴於體系結構的機器碼,並即時執行。在 PHP 中,這意味着 JIT 將爲 Zend VM 生成的指令視爲中間表述,並以依賴於體系結構的機器碼執行,也就是說託管代碼的不再是 Zend VM,而是更爲底層的 CPU。

雖然自 PHP 7.0 以來,通過優化核心數據結構 HashTable、強化 Zend VM 中某些操作碼與持續改進 OPCache 的 Optimizer 組件等具體措施,PHP 性能得到了顯著提升,但是實際上這些優化似乎已經走到極限了。現在 JIT 從底層着手,被認爲是目前提升 PHP 性能的最佳出路。

關於是否引入 JIT 的官方投票結果已於近日公佈,因爲大部分核心開發者投了贊成票,所以 PHP 8 中將會支持 JIT。

另外值得一提的是,PHP JIT 對於使用 PHP 的網站來說提速可能並不明顯,因爲 JIT 在 CPU 密集型的代碼上效果最好,而一般情況下,用 PHP 編寫的程序都是 I/O 密集型的。簡單來說就是,PHP 程序往往受限於 I/O 而不是 CPU,使 PHP 代碼運行速度變慢的因素往往是它們正在執行的 I/O 操作,包括連接、讀取和寫入數據庫、高速緩存、文件與套接字等。

PHP 中 CPU 密集型代碼的一個例子是 Zend/bench.php。

那麼 PHP 中的 JIT 將會在哪裏發揮作用呢?答案是數學領域。關於 PHP JIT 的詳細介紹,可以查看:https://blog.krakjoe.ninja/2019/03/php-gr8.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章