JIT 的好處
主要是 JIT 帶來的性能提升,以及性能提升對整個語言使用場景的擴展及語言生態發展的支持。
1、目前已經很難通過常槼手段提升 PHP 的性能,JIT 基本上是目前性能提升的唯一手段;
2、JIT 帶來的性能提升可以讓 PHP 在更多使用場景( CPU 密集)中發揮作用;
3、可以使用 PHP 來開發内置函數,而不用擔心性能方面的問題。這一方面可以加速語言的發展(更多人可以參與進來),同時也可以減少目前使用 C 開發容易出現的内存管理、溢出等問題。
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 將會在哪裡發揮作用呢?答案是數學領域。