程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> HHVM簡介(譯)

HHVM簡介(譯)

編輯:關於PHP編程

原文鏈接:http://coderoncode.com/2013/07/24/introduction-hhvm.html

“HHVM(HIpHop Virtual Machina)把PHP代碼轉換成高層次的字節碼(普遍認為是一種中間語言)。然後這樣的字節碼在運行時被JIT(just-in-time)編譯器動 態地轉換成x64機器碼。基於這樣的考慮,HHVM和包括C#/CLR和Java/JVM在內的其他語言中的虛擬機類似。”

有點長的歷史

在2008年早期Facebook網站便工作在HipHop(一個PHP執行引擎,現在是HPHP)上。其原始的動機便是把Facebook網站中 大量的PHP代碼轉換成C++代碼,以便節約資源和提升應用性能。其原始版本便是HPHPc(一個把PHP代碼轉換成C++代碼的編譯器)。

在接下來的兩年時間裡Facebook網站繼續工作在HipHop上,這時候的HipHop增加了HPHPi(一個HPHP的”開發模式”版本)和 HPHPd(HipHop debugger)。運行在HipHop平台上的PHP應用程序允許開發者查看和單步執行代碼並且可以交互式地調試。

在巅峰時期,運行在HipHop上的PHP代碼在性能上是運行在ZEND引擎上的PHP代碼的6倍。然而,在HipHop的第一次迭代版上仍然有幾個缺點:

1、HPHPc不是完全的支持PHP語言,最明顯的便是不支持create_function和eval這兩個函數。誠然,我並不認為對於不支持eval這個函數是件壞事。

2、Facebook的開發者必須維護兩個不同的引擎(HPHPc和HPHPi),這樣的結果便是導致重復的工作和浪費資源。

3、最後,HPHPc需要完全不同的部署過程,這樣會妨礙到它被PHP開發者所采納。

鑒於這些問題,Facebook公司在2010年早期采取了兩個關鍵行動。其一便是把HipHop平台開源了,開源這樣的一個項目是一個偉大的方 式,便於構建一個圍繞著這個項目的社區並且可以從社區中獲取到來自外界的幫助。其二,Facebook公司開始了HipHop在現代版本上的發展,這便是 HHVM(HipHop virtual Machine)。HHVM提升了HPHPc的健壯性並且修正了許多關鍵性的問題。

HHVM建立在HPHPc的頂端,其工作方式便是把PHP代碼轉換成高層次的字節碼(一種中間語言)。這樣的字節碼在運行時被JIT(Just-In-Time)編譯器動態地轉換成機器碼。

如果你像我一樣,你可能對字節碼、機器碼和Just-In-Time編譯器還有著模糊的記憶。所以,讓我們暫時偏離一下主題快速地回顧下這些概念,然後講解下他們是如何在HHVM中扮演關鍵性的角色。

字節碼、機器碼以及JIT,哦,我的…!

字節碼:它是一個人們讀不懂的代碼,被設計來讓解釋器或者編譯器高效執行的。當HHVM第一次導入我們的項目,它把所有的PHP代碼轉換成字節碼這樣的中間形式。產生的字節碼和特定類型的計算機結構無關,因此可以很方便地在不同的系統間移植。

機器碼:它是一組被設計成可以由CPU直接執行的指令。如果你曾經玩過Assembly(誰沒玩過呢?),你一定能很好的理解什麼是機器碼。對於沒有興趣玩assembly或者類似語言的極少數的你們來說,機器碼是由編譯器或者解釋器產生的並且可以直接被CPU執行的代碼。

JIT(Just In Time)編譯器:Just in time編譯技術是用來提升軟件性能的一項技術。它的實現原理便是在執行期間編譯存儲在內存中字節碼,JIT編譯器導入這些字節碼並且編譯成所需要的部分。

通過應用這些技術所獲得的性能和速度便能給HipHop及隨後的HHVM提供核心優勢。保持一個PHP代碼庫,同時實現性能上堪比編譯過的應用程序。

目前的HHVM基本上支持整個的PHP5.4版本,然而HHVM仍然有妨礙到一些應用程序執行的許多bugs。基於這樣的原因,Facebook公 司設置的目標便是能讓開源的頂尖的前20個PHP應用程序運行在HHVM上。第一個運行在其上的最流行的應用便是Wordpress。

接下來

現在我們對於HHVM究竟是做什麼的及其優勢有了很好的了解,並且對於運行在其上的應用程序我們可以很方便的開始測試了。在接下來的文章裡,我會介 紹到如何在虛擬機上安裝HHVM,以及在你的應用程序上運行基准測試,最後(雙手合十),介紹如何在HHVM上運行Magento。

 

更多文章請關注我的個人博客:http://www.nomoneynowife.com

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved