PHP的JIT是什麼?PHP 8中確認支持JIT

2021-01-07 腳本之家

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

JIT 的好處

主要是 JIT 帶來的性能提升,以及性能提升對整個語言使用場景的擴展及語言生態發展的支持。

目前已經很難通過常規手段提升 PHP 的性能,JIT 基本上是目前性能提升的唯一手段;JIT 帶來的性能提升可以讓 PHP 在更多使用場景( CPU 密集)中發揮作用;可以使用 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 將會在哪裡發揮作用呢?答案是數學領域。

好了,今天就給大家介紹這麼多,更多精彩內容繼續關注本站哦

相關焦點

  • PHP 8 確認支持 JIT
    一直以來,大家都在討論 PHP 8 中是否會支持 JIT(Just-In-Time)即時編譯執行功能,最新消息是官方已經確認將其引入
  • 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文件的本機代碼將存儲在OPcache共享內存的附加區域中,並且op_array→opcodes []。handler指針指向JIT版本代碼的入口點。」為了更好地理解什麼是JIT for PHP,我review一下PHP如何從原始碼執行到最終結果。
  • 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!
  • 原來PHP 8 都正式發布了
    php8的下載地址:https://www.php.net/downloads.phpPHP 8.0.0 目前是最新的主要版本,它引入了一些重大變更,以及許多新特性和性能優化,PHP 8.0 值得關注的改進包括以下:1、PHP 8.0 引入了備受期待的
  • php語言是什麼?學好php需要掌握什麼?
    php的語法有C、Java和Perl的特點也有自創的特點,經過了24年的發展php從最初的1.0發展7.0版本,php的功能已經發展非常強大,php是適合編程零基礎入手的一門程式語言,下面為大家介紹一下學習php需要經過哪些過程?
  • PHPGrid 1.4.8 發布 PHP的CRUD框架
    PHPGrid 1.4.8 為收費用戶提供了 HTML 編輯器集成、FancyBox 集成以及從 phpArray 中加載表格數據、條件格式化和數據顯示等等。PhpGrid是為php開發人員提供強大,開源的CRUD(添加,顯示,刪除,修改)框架.
  • 怎麼理解php中的變量?php變量命名注意什麼?
    怎麼理解php中的變量?程序中的變量源於數學,在程序語言中能夠儲存結果或者表示抽象概念。簡單理解變量是臨時存儲值的容器,它可以儲存數字、文本、和一些複雜的數據(比如說字符串、複雜的排列組合等),變量在php語言中居於核心地位,是使用php的關鍵所在,變量的值在程序運行中會隨時發生變化,能夠把程序中準備使用的一段數據起一個簡短容易記得名字,另外它還可以保存用戶輸入數據和特點運算的結果,總結變量是變量是用於跟蹤幾乎所有類型信息的簡單工具。
  • php變量是什麼?php變量的數據類型、命名規則等詳細介紹
    大家好,歡迎關注支持,謝謝!本篇將介紹「php變量是什麼?php變量的數據類型、命名規則以及php變量的使用教程」,有興趣的朋友可以了解一下!一、前言php是一門開源的腳本語言,它的語法簡單實用,利於學習,被廣泛的使用於Web開發領域。目前很多中小型網站都是使用php語言開發的,如果我們能學好php語言,也是很有前途的。
  • PHP8 新特性之 Attributes - php中文網
    PHP8的Alpha版本,過幾天就要發布了,其中包含了不少的新特性,當然我自己認為最重要的還是JIT,這個我從2013年開始參與,中間挫折無數,失敗無數後,終於要發布的東東。不過,今天呢,我不打算談JIT,等PHP8發布了以後,我再單獨寫個類似《深入理解PHP8之JIT》系列來說吧。
  • PHP中JSON的應用
    網際網路的今天,AJAX已經不是什麼陌生的詞彙了。說起AJAX,可能會立即想起因RSS而興起的XML。XML的解析,恐怕已經不是什麼難題了,特別是PHP5,大量的XML解析器的湧現,如最輕量級的SimpleXML。不過對於AJAX來說,XML的解析更傾向於前臺Javascript的支持度。
  • O chit-jit,thi-khi chin ho,心疼臺灣小學生五分鐘……
    「O chit-jit,thi-khi chin ho.」 各路翻譯大神,你們懂這是什麼意思嗎?在臺灣,小學生都要會!閩南語(被臺當局稱為「臺語」)自陳水扁時期正式成為臺灣地區小學課程中的一部分,蔡英文上臺之後因「去中國化」的需求更是不遺餘力地推進。
  • php 中關於時區的那點事
    中所支持的中國時區,參考 亞洲所支持的時區列表關於時區的編程實現時區不僅僅是現實生活的問題,計算機編程世界也有時間,自然也離不開時區的概念.在計算機世界中,一切都是數據,最好時區的概念也能體現在相關資料庫中,幸運的是已經有前輩為我們提供了時區信息資料庫,而各類語言基本都會提供時區的工具類.php 中的日期時間函數庫是 php內置函數庫,我們可以方便地操作時間,設置時區等.
  • CTF中常見的PHP漏洞小結
    當這個函數接受到了不符合的類型,這個函數將發生錯誤,但是在5.3之前的php中,顯示了報錯的警告信息後,將return 0 !!!! 也就是雖然報了錯,但卻判定其相等了。這對於使用這個函數來做選擇語句中的判斷的代碼來說簡直是一個致命的漏洞,當然,php官方在後面的版本中修復了這個漏洞,使得報錯的時候函數不返回任何值。<?
  • php常量是什麼?它和變量有什麼區別?
    大家好,歡迎關注支持,謝謝!本篇將介紹php常量是什麼?它和變量有什麼區別?有興趣的朋友可以了解一下!一、前言php是一門很受歡迎的程式語言之一,它的語法簡單易學,迎來了一大批自學者,小編也是其中之一。小編自學php學了四個多月吧!
  • (基礎篇) PHP需要它—PHP擴展庫
    需要時在php.ini配置文件中選擇加載。在Windows下加載擴展庫,是通過修改php.ini文件來完成的。用戶也可以在腳本中通過使用dl()函數來動態加載。PHP擴展庫的DLL文件都具有php_前綴。很多擴展庫都內置於Windows版本的PHP中,要加載這些擴展庫不需要額外的DLL文件和extension配置指令。Windows下的PHP擴展庫列表列出了需要或曾經需要額外DLL文件的擴展庫。
  • PHP 7.4.0 發布 支持類型聲明
    PHP 7.4.0 進行了許多改進,並帶來了一些新特性,包括:Typed Properties  類型屬性類屬性現在支持類型聲明,以下示例將強制 $User-> id 只能分配 int 值,而 $User-> name 只能分配 string 值。<?
  • PHP 8.0 正式版發布,性能提升 10%
    PHP 8.0 引入了 JIT編譯器特性,同時加入多種新的語言功能,例如命名參數、聯合類型、註解、Constructor Property Promotion、match 表達式、nullsafe 運算符以及對類型系統、錯誤處理和一致性的改進。下載地址:https://www.php.net/downloads.php