PHP 8 確認支持 JIT

2020-12-13 開源中國

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

https://wiki.php.net/rfc/jit

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

相關焦點

  • PHP的JIT是什麼?PHP 8中確認支持JIT
    一直以來,大家都在討論 PHP 8 中是否會支持 JIT(Just-In-Time)即時編譯執行功能,最新消息是官方已經確認將其引入。JIT 的好處主要是 JIT 帶來的性能提升,以及性能提升對整個語言使用場景的擴展及語言生態發展的支持。
  • PHP 5 到 PHP 7 性能評測(含 JIT 版 PHP 8 對比)
    隨著項目的發展,由於 PHP 3 天然的可擴展性, PHP 在核心和附加擴展開發的功能得到了蓬勃發展,如網絡通信,解析,緩存和資料庫支持。語言本身也在發展,帶來了一系列的改進。這包括支持面向對象的結構,例如類,接口, traits,閉包等。對於許多開發人員來說,僅有新功能是不夠的。
  • 從PHP 5到PHP 7性能全評測(含未發布的JIT版PHP 8對比)
    隨著項目的發展,由於 PHP 3 天然的可擴展性, PHP 在核心和附加擴展開發的功能得到了蓬勃發展,如網絡通信,解析,緩存和資料庫支持。語言本身也在發展,帶來了一系列的改進。這包括支持面向對象的結構,例如類,接口, traits,閉包等。對於許多開發人員來說,僅有新功能是不夠的。
  • PHP 8.0正式發布:支持JIT編譯器,性能提升高達3倍
    https://wiki.php.net/rfc/union_types_v2支持聯合類型之後,將會允許將更多類型信息從 phpdoc 遷移至函數籤名。可以說,泛型之後,聯合類型是目前類型聲明系統中最大的突破口。
  • PHP 8大量新功能:JIT以及其他 - 蟲蟲搜奇
    萬眾矚目的PHP 8,預計將於今年年12月份發布。根據已經批准和實施的RFC預案,可以PHP將帶來許多強大的功能和出色的語言改進。作為嘗鮮,本我們一起來展望一下PHP8的新功能和改進。PHP 8改進和新功能除了JIT之外,還值得期望的PHP 8新功能和改進還有很多,它們將使PHP更加可靠和高效。
  • 原來PHP 8 都正式發布了
    php8的下載地址:https://www.php.net/downloads.phpPHP 8.0.0 目前是最新的主要版本,它引入了一些重大變更,以及許多新特性和性能優化,PHP 8.0 值得關注的改進包括以下:1、PHP 8.0 引入了備受期待的
  • PHP 8.0 正式版發布,性能提升 10%
    PHP 8.0 引入了 JIT編譯器特性,同時加入多種新的語言功能,例如命名參數、聯合類型、註解、Constructor Property Promotion、match 表達式、nullsafe 運算符以及對類型系統、錯誤處理和一致性的改進。下載地址:https://www.php.net/downloads.php
  • PHPGrid 1.4.8 發布 PHP的CRUD框架
    PHPGrid 1.4.8 為收費用戶提供了 HTML 編輯器集成、FancyBox 集成以及從 phpArray 中加載表格數據、條件格式化和數據顯示等等。PhpGrid是為php開發人員提供強大,開源的CRUD(添加,顯示,刪除,修改)框架.
  • PyTorch 1.0 發布,JIT、全新的分布式庫、C++ 前端
    PyTorch 1.0 提供了 torch.jit.trace 和 torch.jit.script 兩種方式使現有代碼與 JIT 兼容。一經註解,Torch Script 代碼便可以被積極地優化,並且可以被序列化以在新的 C++ API 中使用,並且 C++ API 不依賴於 Python。# Write in Python, run anywhere!
  • windows伺服器使用nginx來部署web環境,棄用iis支持php的方法
    Windows上使用nginx作為web伺服器時,我們的php環境就需要藉助第三方的插件來啟動,在windows伺服器上nginx現在還沒有啟動php的功能,nginx不像iis那樣只要iis和php綁定成功,iis啟動時php也就會跟著啟動,nginx現在支持單獨在windows系統上獨立啟動,但是還不支持啟動php,我們今天的課題就是在Windows系統上獨立啟動
  • PHP8 新特性之 Attributes - php中文網
    PHP8的Alpha版本,過幾天就要發布了,其中包含了不少的新特性,當然我自己認為最重要的還是JIT,這個我從2013年開始參與,中間挫折無數,失敗無數後,終於要發布的東東。不過,今天呢,我不打算談JIT,等PHP8發布了以後,我再單獨寫個類似《深入理解PHP8之JIT》系列來說吧。
  • PHP 7.4.0 發布 支持類型聲明
    PHP 7.4.0 進行了許多改進,並帶來了一些新特性,包括:Typed Properties  類型屬性類屬性現在支持類型聲明,以下示例將強制 $User-> id 只能分配 int 值,而 $User-> name 只能分配 string 值。<?
  • PHP程式設計師必備的8款質量檢查工具
    雖然這是一句戲謔,但是不可否認的是PHP確實很受程式設計師青睞,本文我們將為大家推薦8款很酷的PHP質量檢查工具。  下載連結:http://www.phpunit.cn/  Cucumber  Cucumber 是一個能夠理解用普通語言 描述的測試用例的支持行為驅動開發(BDD)的自動化測試工具,用Ruby編寫,支持Java和·Net等多種開發語言。  下圖是一個入門教程的節選案例:
  • 有安全研究者混入了 PHP 8.0 開發組!
    來源 | 代碼審計(ID:white-hat-note)經歷了近半年的alpha版本測試後,PHP在2020年11月26號正式發布了8.0版本:https://www.php.net/releases/8.0/en.php今天我們就來瀏覽一下PHP 8.0中出現的主要特性,以及它給我們安全研究人員帶來的挑戰。
  • Spray.se 來自瑞典的老牌PHP空間 100M
    FTP、WEB方式上傳管理文件,支持PHP5(非安全模式),雖然有10M的MySQL資料庫,但實際無法激活使用,還不支持綁定自己的域名。Kvinna/man:性別Frnamn:名字Efternamn:姓氏Spraynamn:用戶名Lsenord:密碼Bekr fta ditt l senord:密碼確認填好這些點右下角按鈕進入下一步。
  • Robbe-1.6.0 發布 - PHP開源中文分詞擴展, GBK支持
    Robbe是建立在Friso中文分詞器上的一個高性能php中文分詞擴展。同時支持對UTF-8/GBK編碼的切分。
  • 8 個必備的PHP功能開發
    [導讀] 做過PHP開發的程式設計師應該清楚,PHP中有很多內置的功能,掌握了它們,可以幫助你在做PHP開發時更加得心應手,本文將分享8個開發必備的
  • Jsonnet-PHP v1.2.0 發布, PHP 支持 Jsonnet 擴展
    Jsonnet-PHP v1.2.0發布了,JsonNet-PHP是Google Jsonnet對PHP的支持擴展,該版本使用最新版本至v0.9.5的LibJsonnet。
  • InitPHP v3.8.1 發布,15 年,我們也是蠻拼的
    InitPHP v3.8.1版本發布,15年,我們也是蠻拼的 更新日誌: InitPHP V3.8.1
  • xmake v2.3.8 發布, 新增 Intel C++/Fortran 編譯器支持
    在這個新版本中,我們對 Intel 系列的 C++ 和 Fortran 編譯器做了全平臺支持,並且改進了上個版本新加的 Wasm 工具鏈支持,同時對 Qt SDK for Wasm 也進行了支持。另外,我們還將 luajit 升級到最新的 v2.1 版本,在跨平臺方面,xmake 也做了很大的完善,增加了 mips64 架構的運行支持。