±³¾°
HHVM ÊÇ Facebook ¿ª·¢µÄ¸ßÐÔÄÜ PHP ÐéÄâ»ú£¬Ðû³Æ±È¹Ù·½µÄ¿ì9±¶£¬ÎÒºÜºÃÆæ£¬ÓÚÊdzé¿Õ¼òµ¥Á˽âÁËһϣ¬²¢ÕûÀí³öÕâÆªÎÄÕ£¬Ï£ÍûÄܻشðÇå³þÁ½·½ÃæµÄÎÊÌ⣺
1.HHVM µ½µ×¿¿Æ×ô£¿ÊÇ·ñ¿ÉÒÔÓõ½²úÆ·ÖУ¿
2.ËüΪʲô±È¹Ù·½µÄ PHP ¿ìºÜ¶à£¿µ½µ×ÊÇÈçºÎÓÅ»¯µÄ£¿
Äã»áÔõô×ö£¿
ÔÚÌÖÂÛ HHVM ʵÏÖÔÀíǰ£¬ÎÒÃÇÏÈÉèÉí´¦µØÏëÏ룺¼ÙÉèÄãÓиö PHP дµÄÍøÕ¾Óöµ½ÁËÐÔÄÜÎÊÌ⣬¾·ÖÎöºó·¢ÏֺܴóÒ»²¿·Ö×ÊÔ´¾ÍºÄÔÚ
PHP ÉÏ£¬ÕâʱÄã»áÔõôÓÅ»¯ PHP ÐÔÄÜ£¿
±ÈÈç¿ÉÒÔÓÐÒÔϼ¸ÖÖ·½Ê½£º
·½°¸1£¬Ç¨ÒƵ½ÐÔÄܸüºÃµÄÓïÑÔÉÏ£¬Èç Java¡¢C++¡¢Go¡£
·½°¸2£¬Í¨¹ý RPC ½«¹¦ÄÜ·ÖÀë³öÀ´ÓÃÆäËüÓïÑÔʵÏÖ£¬Èà PHP ×ö¸üÉÙµÄÊÂÇ飬±ÈÈç
Twitter ¾Í½«´óÁ¿ÒµÎñÂß¼·Åµ½ÁË Scala ÖУ¬Ç°¶ËµÄ Rails Ö»¸ºÔðÕ¹ÏÖ¡£
·½°¸3£¬Ð´ PHP À©Õ¹£¬ÔÚÐÔÄÜÆ¿¾±µØ·½»» C/C++¡£
·½°¸4£¬ÓÅ»¯ PHP µÄÐÔÄÜ¡£
·½°¸1¼¸ºõ²»¿ÉÐУ¬Ê®Äêǰ Joel ¾ÍÄà Netscape µÄÀý×Ó¾¯¸æ¹ý£¬Ä㽫·ÅÆúÊǶàÄêµÄ¾Ñé»ýÀÛ£¬ÓÈÆäÊÇÏñ
Facebook ÕâÖÖÒµÎñÂß¼¸´ÔӵIJúÆ·£¬PHP ´úÂëʵÔÚÌ«¶àÁË£¬¾Ý³ÆÓÐ2ǧÍòÐУ¨ÒýÓÃ×Ô [PHP on
the Metal with HHVM]£©£¬ÐÞ¸ÄÆðÀ´µÄ³É±¾¿ÖűÈд¸öÐéÄâ»ú»¹´ó£¬¶øÇÒ¶ÔÓÚÒ»¸öÉÏǧÈ˵ÄÍŶӣ¬´ÓÍ·¿ªÊ¼Ñ§Ï°Ò²ÊDz»¿É½ÓÊܵġ£
·½°¸2ÊÇ×î±£Ïյķ½°¸£¬¿ÉÒÔÖð²½Ç¨ÒÆ£¬ÊÂʵÉÏ Facebook Ò²ÔÚ³¯Õâ·½ÃæÅ¬Á¦ÁË£¬¶øÇÒ»¹¿ª·¢ÁË Thrift
ÕâÑùµÄ RPC ½â¾ö·½°¸£¬Facebook ÄÚ²¿Ö÷ҪʹÓõÄÁíÒ»¸öÓïÑÔÊÇ C++£¬´ÓÔçÆÚµÄ Thrift
´úÂë¾ÍÄÜ¿´³öÀ´£¬ÒòΪÆäËüÓïÑÔµÄʵÏÖ¶¼ºÜ¼òª£¬Ã»·¨ÔÚÉú²ú»·¾³ÏÂʹÓá£
ĿǰÔÚ Facebook ÖÐ¾Ý³Æ PHP:C++ ÒѾ´Ó 9:1 Ôö¼Óµ½ 7:3 ÁË£¬¼ÓÉÏÓÐ Andrei
Alexandrescu µÄ´æÔÚ£¬C++ ÔÚ Facebook ÖÐÔ½À´Ô½Á÷ÐУ¬µ«ÕâÖ»Äܽâ¾ö²¿·ÖÎÊÌ⣬±Ï¾¹
C++ ¿ª·¢³É±¾±È PHP ¸ßµÃ¶à£¬²»ÊʺÏÓÃÔÚ¾³£Ð޸ĵĵط½£¬¶øÇÒÌ«¶à RPC µÄµ÷ÓÃÒ²»áÑÏÖØÓ°ÏìÐÔÄÜ¡£
·½°¸3¿´ÆðÀ´ÃÀºÃ£¬Êµ¼ÊÖ´ÐÐÆðÀ´È´ºÜÄÑ£¬Ò»°ãÀ´ËµÐÔÄÜÆ¿¾±²¢²»»áºÜÏÔÖø£¬´ó¶àÊDz»¶ÏÀۼӵĽá¹û£¬¼ÓÉÏ PHP
À©Õ¹¿ª·¢³É±¾¸ß£¬ÕâÖÖ·½°¸Ò»°ãÖ»ÓÃÔÚ¹«¹²Çұ仯²»´óµÄ»ù´¡¿âÉÏ£¬ËùÒÔÕâÖÖ·½°¸½â¾ö²»Á˶àÉÙÎÊÌâ¡£
¿ÉÒÔ¿´µ½£¬Ç°Ãæ3¸ö·½°¸²¢²»Äܺܺõؽâ¾öÎÊÌ⣬ËùÒÔ Facebook ÆäʵûÓÐÑ¡ÔñµÄÓàµØ£¬Ö»ÄÜÈ¥¿¼ÂÇ PHP
±¾ÉíµÄÓÅ»¯ÁË¡£
¸ü¿ìµÄ PHP
¼ÈȻҪÓÅ»¯ PHP£¬ÄÇÈçºÎÈ¥ÓÅ»¯ÄØ£¿ÔÚÎÒ¿´À´¿ÉÒÔÓÐÒÔϼ¸ÖÖ·½·¨£º
·½°¸1£¬PHP ÓïÑÔ²ãÃæµÄÓÅ»¯¡£
·½°¸2£¬ÓÅ»¯ PHP µÄ¹Ù·½ÊµÏÖ£¨Ò²¾ÍÊÇ Zend£©¡£
·½°¸3£¬½« PHP ±àÒë³ÉÆäËüÓïÑ﵀ bytecode£¨×Ö½ÚÂ룩£¬½èÖúÆäËüÓïÑÔµÄÐéÄâ»ú£¨Èç
JVM£©À´ÔËÐС£
·½°¸4£¬½« PHP ת³É C/C++£¬È»ºó±àÒë³É±¾µØ´úÂë¡£
·½°¸5£¬¿ª·¢¸ü¿ìµÄ PHP ÐéÄâ»ú¡£
PHP ÓïÑÔ²ãÃæµÄÓÅ»¯ÊÇ×î¼òµ¥¿ÉÐеģ¬Facebook µ±È»Ïëµ½ÁË£¬¶øÇÒ»¹¿ª·¢ÁË
XHProf ÕâÑùµÄÐÔÄÜ·ÖÎö¹¤¾ß£¬¶ÔÓÚ¶¨Î»ÐÔÄÜÆ¿¾±ÊǺÜÓаïÖúµÄ¡£
²»¹ý XHProf »¹ÊÇûÄܺܺýâ¾ö Facebook µÄÎÊÌ⣬ËùÒÔÎÒÃǼÌÐø¿´£¬½ÓÏÂÀ´ÊÇ·½°¸2£¬¼òµ¥À´¿´£¬Zend
µÄÖ´Ðйý³Ì¿ÉÒÔ·ÖΪÁ½²¿·Ö£º½« PHP ±àÒëΪ opcode¡¢Ö´ÐÐ opcode£¬ËùÒÔÓÅ»¯ Zend ¿ÉÒÔ´ÓÕâÁ½·½ÃæÀ´¿¼ÂÇ¡£
ÓÅ»¯ opcode ÊÇÒ»ÖÖ³£¼ûµÄ×ö·¨£¬¿ÉÒÔ±ÜÃâÖØ¸´½âÎö PHP£¬¶øÇÒ»¹ÄÜ×öһЩ¾²Ì¬µÄ±àÒëÓÅ»¯£¬±ÈÈç Zend
Optimizer Plus£¬µ«ÓÉÓÚ PHP ÓïÑԵĶ¯Ì¬ÐÔ£¬ÕâÖÖÓÅ»¯·½·¨ÊÇÓоÖÏÞÐԵģ¬ÀÖ¹Û¹À¼ÆÒ²Ö»ÄÜÌáÉý20%µÄÐÔÄÜ¡£ÁíÒ»ÖÖ¿¼ÂÇÊÇÓÅ»¯
opcode ¼Ü¹¹±¾Éí£¬Èç»ùÓڼĴæÆ÷µÄ·½Ê½£¬µ«ÕâÖÖ×ö·¨ÐÞ¸ÄÆðÀ´¹¤×÷Á¿Ì«´ó£¬ÐÔÄÜÌáÉýÒ²²»»áÌØ±ðÃ÷ÏÔ£¨¿ÉÄÜ30%£¿£©£¬ËùÒÔͶÈë²ú³ö±È²»¸ß¡£
ÁíÒ»¸ö·½·¨ÊÇÓÅ»¯ opcode µÄÖ´ÐУ¬Ê×Ïȼòµ¥ÌáһϠZend ÊÇÈçºÎÖ´Ðеģ¬Zend µÄ interpreter£¨Ò²½Ð½âÊÍÆ÷£©ÔÚ¶Áµ½
opcode ºó£¬»á¸ù¾Ý²»Í¬µÄ opcode µ÷Óò»Í¬º¯Êý£¨ÆäʵÓÐЩÊÇ switch£¬²»¹ýΪÁËÃèÊö·½±ãÎÒ¼ò»¯ÁË£©£¬È»ºóÔÚÕâ¸öº¯ÊýÖÐÖ´Ðи÷ÖÖÓïÑÔÏà¹ØµÄ²Ù×÷£¨¸ÐÐËȤµÄ»°¿É¿´¿´ÉîÈëÀí½â
PHP ÄÚºËÕâ±¾Ê飩£¬ËùÒÔ Zend Öв¢Ã»ÓÐʲô¸´ÔÓ·â×°ºÍ¼ä½Óµ÷Óã¬×÷Ϊһ¸ö½âÊÍÆ÷À´ËµÒѾ×öµÃºÜºÃÁË¡£
ÏëÒªÌáÉý Zend µÄÖ´ÐÐÐÔÄÜ£¬¾ÍÐèÒª¶Ô³ÌÐòµÄµ×²ãÖ´ÐÐÓÐËù½â£¬±ÈÈ纯Êýµ÷ÓÃÆäʵÊÇÓпªÏúµÄ£¬ËùÒÔÄÜͨ¹ý
Inline threading À´ÓÅ»¯µô£¬ËüµÄÔÀí¾ÍÏñ C ÓïÑÔÖÐµÄ inline ¹Ø¼ü×ÖÄÇÑù£¬µ«ËüÊÇÔÚÔËÐÐʱ½«Ïà¹ØµÄº¯ÊýÕ¹¿ª£¬È»ºóÒÀ´ÎÖ´ÐУ¨Ö»ÊÇ´ò¸ö±È·½£¬Êµ¼ÊʵÏÖ²»Ì«Ò»Ñù£©£¬Í¬Ê±»¹±ÜÃâÁË
CPU Á÷Ë®ÏßÔ¤²âʧ°Üµ¼ÖµÄÀË·Ñ¡£
ÁíÍ⻹¿ÉÒÔÏñ JavaScriptCore ºÍ LuaJIT ÄÇÑùʹÓûã±àÀ´ÊµÏÖ interpreter£¬¾ßÌåϸ½Ú½¨Òé¿´¿´
Mike µÄ½âÊÍ
µ«ÕâÁ½ÖÖ×ö·¨Ð޸Ĵú¼ÛÌ«´ó£¬ÉõÖÁ±ÈÖØÐ´Ò»¸ö»¹ÄÑ£¬ÓÈÆäÊÇÒª±£Ö¤ÏòϼæÈÝ£¬ºóÃæÌáµ½ PHP µÄÌØµãʱÄã¾ÍÖªµÀÁË¡£
¿ª·¢Ò»¸ö¸ßÐÔÄܵÄÐéÄâ»ú²»ÊǼþ¼òµ¥µÄÊÂÇ飬JVM »¨ÁË10¶àÄê²Å´ïµ½ÏÖÔÚµÄÐÔÄÜ£¬ÄÇÊÇ·ñÄÜÖ±½ÓÀûÓÃÕâЩ¸ßÐÔÄܵÄÐéÄâ»úÀ´ÓÅ»¯
PHP µÄÐÔÄÜÄØ£¿Õâ¾ÍÊÇ·½°¸3µÄ˼·¡£
ÆäʵÕâÖÖ·½°¸Ôç¾ÍÓÐÈ˳¢ÊÔ¹ýÁË£¬±ÈÈç Quercus ºÍ IBM µÄ P8£¬Quercus ¼¸ºõû¼ûÓÐÈËʹÓ㬶ø
P8 Ò²ÒѾËÀµôÁË¡£Facebook Ò²Ôø¾µ÷ÑйýÕâÖÖ·½Ê½£¬ÉõÖÁ»¹³öÏÖ¹ý²»¿¿Æ×µÄ´«ÎÅ £¬µ«Æäʵ Facebook
ÔÚ2011Äê¾Í·ÅÆúÁË¡£
ÒòΪ·½°¸3¿´ÆðÀ´ÃÀºÃ£¬µ«Êµ¼ÊЧ¹ûÈ´²»ÀíÏ룬°´Õպܶà´óÅ£µÄ˵·¨£¨±ÈÈç Mike£©£¬VM ×ÜÊÇΪij¸öÓïÑÔÓÅ»¯µÄ£¬ÆäËüÓïÑÔÔÚÉÏÃæÊµÏÖ»áÓöµ½ºÜ¶àÆ¿¾±£¬±ÈÈ綯̬µÄ·½·¨µ÷Ó㬹ØÓÚÕâµãÔÚ
Dart µÄÎĵµÖÐÓйý½éÉÜ£¬¶øÇÒ¾Ý˵ Quercus µÄÐÔÄÜÓë Zend+APC ±È²î²»ÁËÌ«¶à£¨[À´×ÔThe
HipHop Compiler for PHP]£©£¬ËùÒÔû̫´óÒâÒå¡£
²»¹ý OpenJDK Õ⼸ÄêÒ²ÔÚŬÁ¦£¬×î½üµÄ Grall ÏîÄ¿¿´ÆðÀ´»¹²»´í£¬Ò²ÓÐÓïÑÔÔÚÉÏÃæÈ¡µÃÁËÏÔÖøµÄЧ¹û£¬µ«ÎÒ»¹Ã»¿ÕÑо¿
Grall£¬ËùÒÔÕâÀïÎÞ·¨Åжϡ£
½ÓÏÂÀ´ÊÇ·½°¸4£¬ËüÕýÊÇ HPHPc£¨HHVM µÄǰÉí£©µÄ×ö·¨£¬ÔÀíÊǽ« PHP ´úÂëת³É C++£¬È»ºó±àÒëΪ±¾µØÎļþ£¬¿ÉÒÔÈÏΪÊÇÒ»ÖÖ
AOT£¨ahead of time£©µÄ·½Ê½£¬¹ØÓÚÆäÖдúÂëת»»µÄ¼¼Êõϸ½Ú¿ÉÒԲο¼ The HipHop Compiler
for PHP ÕâÆªÂÛÎÄ£¬ÒÔÏÂÊǸÃÂÛÎÄÖеÄÒ»¸ö½ØÍ¼£¬¿ÉÒÔͨ¹ýËüÀ´´ó¸ÅÁ˽⣺

ÕâÖÖ×ö·¨µÄ×î´óÓŵãÊÇʵÏÖ¼òµ¥£¨Ïà¶ÔÓÚÒ»¸ö VM À´Ëµ£©£¬¶øÇÒÄÜ×öºÜ¶à±àÒëÓÅ»¯£¨ÒòΪÊÇÀëÏߵģ¬ÂýµãҲûÊ£©£¬±ÈÈçÉÏÃæµÄÀý×Ӿͽ«-
1ÓÅ»¯µôÁË£¬µ«ËüºÜÄÑÖ§³Ö PHP Öеĺܶද̬µÄ·½·¨£¬Èç eval()¡¢create_function()£¬ÒòΪÕâ¾ÍµÃÔÙÄÚǶһ¸ö
interpreter£¬³É±¾²»Ð¡£¬ËùÒÔ HPHPc ¸É´à¾ÍÖ±½Ó²»Ö§³ÖÕâЩÓï·¨¡£
³ýÁË HPHPc£¬»¹ÓÐÁ½¸öÀàËÆµÄÏîÄ¿£¬Ò»¸öÊÇ Roadsend£¬ÁíÒ»¸öÊÇ
phc £¬phc µÄ×ö·¨Êǽ« PHP ת³ÉÁË C ÔÙ±àÒ룬ÒÔÏÂÊÇËü½« file_get_contents($f)
ת³É C ´úÂëµÄÀý×Ó£º
¡¶ÕâÀïÓеãÒªÌØ±ð˵Ã÷µÄµØ·½¡· |
»°Ëµ phc ×÷ÕßÔø¾ÔÚ²©¿ÍÉÏ¿ÞËߣ¬ËµËûÁ½Äêǰ¾ÍÈ¥ Facebook ÑÝʾ¹ý
phc ÁË£¬»¹ºÍÄÇÀïµÄ¹¤³Ìʦ½»Á÷¹ý£¬½á¹ûÈ˼ÒÒ»·¢²¼¾Í»ðÁË£¬¶ø×Ô¼ºÃ¦»îÁË4ÄêȴĬĬÎÞÎÅ£¬ÏÖÔÚǰ;Ãìã¡£¡£¡£
Roadsend Ò²ÒѾ²»Î¬»¤ÁË£¬¶ÔÓÚ PHP ÕâÑùµÄ¶¯Ì¬ÓïÑÔÀ´Ëµ£¬ÕâÖÖ×ö·¨ÓкܶàµÄ¾ÖÏÞÐÔ£¬ÓÉÓÚÎÞ·¨¶¯Ì¬
include£¬Facebook ½«ËùÓÐÎļþ¶¼±àÒëµ½ÁËÒ»Æð£¬ÉÏÏßʱµÄÎļþ²¿Êð¾ÓÈ»´ïµ½ÁË 1G£¬Ô½À´Ô½²»¿É½ÓÊÜÁË¡£
ÁíÍâÓл¹ÓÐÒ»¸ö½Ð PHP QB µÄÏîÄ¿£¬ÓÉÓÚʱ¼ä¹ØÏµÎÒûÓп´£¬¸Ð¾õ¿ÉÄÜÊÇÀàËÆµÄ¶«¶«¡£
ËùÒÔ¾ÍֻʣÏÂÒ»Ìõ·ÁË£¬ÄǾÍÊÇдһ¸ö¸ü¿ìµÄ PHP ÐéÄâ»ú£¬½«Ò»ÌõºÚ·×ßµ½µ×£¬»òÐíÄãºÍÎÒÒ»Ñù£¬Ò»¿ªÊ¼Ìýµ½
Facebook Òª×öÒ»¸öÐéÄâ»úÊǾõµÃÌ«ÀëÆ×£¬µ«Èç¹û×Ðϸ·ÖÎö¾Í»á·¢ÏÖÆäʵҲֻÓÐÕâÑùÁË¡£
¸ü¿ìµÄÐéÄâ»ú
HHVM Ϊʲô¸ü¿ì£¿ÔÚ¸÷ÖÖÐÂÎű¨µÀÖж¼Ìáµ½ÁË JIT Õâ¸ö¹Ø¼ü¼¼Êõ£¬µ«ÆäʵԶûÓÐÄÇô¼òµ¥£¬JIT
²»ÊÇʲôÉñÆæµÄħ·¨°ô£¬ÓÃËüÇáÇáÒ»»Ó¾ÍÄÜÌáÉýÐÔÄÜ£¬¶øÇÒ JIT Õâ¸ö²Ù×÷±¾ÉíÒ²ÊÇ»áºÄʱµÄ£¬¶ÔÓÚ¼òµ¥µÄ³ÌÐòû׼»¹±È
interpreter Âý£¬×¶ËµÄÀý×ÓÊÇ LuaJIT 2 µÄ Interpreter ¾ÍÉÔ΢±È V8
µÄ JIT ¿ì£¬ËùÒÔ²¢²»´æÔÚ¾ø¶ÔµÄÊÂÇ飬¸ü¶à»¹ÊÇÔÚϸ½ÚÎÊÌâµÄ´¦ÀíÉÏ£¬HHVM µÄ·¢Õ¹ÀúÊ·¾ÍÊDz»¶ÏÓÅ»¯µÄÀúÊ·£¬Äã¿ÉÒÔ´ÓÏÂͼ¿´µ½ËüÊÇÈçºÎÒ»µãµã³¬¹ý
HPHPc µÄ£º

ÖµµÃÒ»ÌáµÄÊÇÔÚ Android 4.4 ÖÐеÄÐéÄâ»ú ART ¾Í²ÉÓõÄÊÇ
AOT ·½°¸£¨»¹¼ÇµÃô£¿Ç°ÃæÌáµ½µÄ HPHPc ¾ÍÊÇÕâÖÖ£©£¬½á¹û±È֮ǰʹÓà JIT µÄ Dalvik ¿ìÁËÒ»±¶£¬ËùÒÔ˵
JIT Ò²²»Ò»¶¨±È AOT ¿ì¡£
Òò´ËÕâ¸öÏîÄ¿ÊÇÓкܴó·çÏյģ¬Èç¹ûûÓÐÇ¿´óµÄÄÚÐĺÍÒãÁ¦£¬¼«ÓпÉÄܰë;¶ø·Ï£¬Google ¾ÍÔø¾ÏëÓà JIT
ÌáÉý Python µÄÐÔÄÜ£¬µ«×îÖÕʧ°ÜÁË£¬¶ÔÓÚ Google À´ËµÓõ½ Python µÄµØ·½Æäʵ²¢Ã»Ê²Ã´ÐÔÄÜÎÊÌ⣨ºÃ°É£¬ÒÔǰ
Google ÊÇÓà Python д¹ý crawl [²Î¿¼ In The Plex]£¬µ«ÄǶ¼ÊÇ1996ÄêµÄÊÂÇéÁË£©¡£
±ÈÆð Google£¬Facebook ÏÔÈ»Óиü´óµÄ¶¯Á¦ºÍ¾öÐÄ£¬PHP ÊÇ Facebook ×îÖØÒªµÄÓïÑÔ£¬ÎÒÃÇÀ´¿´¿´
Facebook ¶¼Í¶ÈëÁËÄÄЩ´óÅ£µ½Õâ¸öÏîÄ¿ÖУ¨²»È«£©£º
Andrei Alexandrescu£¬¡ºModern C++ Design¡»ºÍ¡ºC++
Coding Standards¡»µÄ×÷Õߣ¬C++ ÁìÓòÎÞ¿ÉÕùÒéµÄ´óÉñ
Keith Adams£¬¸ºÔð¹ý VMware ºËÐļܹ¹£¬µ±Äê VMware
¾ÍÅÉËûÒ»ÈËÈ¥ºÍ Intel ½øÐм¼ÊõºÏ×÷£¬×ãÒÔÖ¤Ã÷ÔÚ VMM ÁìÓòËûÓжàÁ˽âÁË
Drew Paroski£¬ÔÚ΢Èí²ÎÓë¹ý .NET ÐéÄâ»ú¿ª·¢£¬¸Ä½øÁËÆäÖеÄ
JIT
Jason Evans£¬¿ª·¢ÁË jemalloc£¬¼õÉÙÁË Firefox
Ò»°ëµÄÄÚ´æÏûºÄ
Sara Golemon£¬¡ºExtending and Embedding
PHP¡»µÄ×÷Õߣ¬PHP ÄÚºËר¼Ò£¬Õâ±¾Êé¹À¼ÆËùÓÐ PHP ¸ßÊÖ¶¼¿´¹ý°É£¬»òÐíÄã²»ÖªµÀÆäʵËýÊÇÅ®µÄ
ËäȻûÓÐÏñ Lars Bak¡¢Mike Pall ÕâÑùÔÚÐéÄâ»úÁìÓòµÄ¶¥¼¶×¨¼Ò£¬µ«Èç¹ûÕâЩ´óÅ£ÄÜÆëÐÄÐÁ¦£¬Ð´¸öÐéÄâ»ú»¹ÊÇÎÊÌâ²»´óµÄ£¬ÄÇôËûÃǽ«ÃæÁÙʲôÑùµÄÌôսĨ£¿½ÓÏÂÀ´ÎÒÃÇÒ»Ò»ÌÖÂÛ¡£
¹æ·¶ÊÇʲô£¿
×Ô¼ºÐ´ PHP ÐéÄâ»úÒªÃæÁٵĵÚÒ»¸öÎÊÌâ¾ÍÊÇ PHP ûÓÐÓïÑԹ淶£¬ºÜ¶à°æ±¾¼äµÄÓï·¨»¹»á²»¼æÈÝ£¨ÉõÖÁÊÇС°æ±¾ºÅ£¬±ÈÈç
5.2.1 ºÍ 5.2.3£©£¬PHP ÓïÑԹ淶¾¿¾¹ÈçºÎ¶¨ÒåÄØ£¿À´¿´Ò»ÆªÀ´×Ô IEEE µÄ˵·¨£º
The PHP group claim that they have the ?nal say in
the speci?cation of (the language) PHP. This groups
speci?cation is an implementation, and there is no prose
speci?cation or agreed validation suite.
ËùÒÔΨһµÄ;¾¶¾ÍÊÇÀÏÀÏʵʵȥ¿´ Zend µÄʵÏÖ£¬ºÃÔÚ HPHPc ÖÐÒѾʹ¿à¹ýÒ»´ÎÁË£¬ËùÒÔ HHVM
ÄÜÖ±½ÓÀûÓÃÏֳɣ¬Òò´ËÕâ¸öÎÊÌâ²¢²»ËãÌ«´ó¡£
ÓïÑÔ»¹ÊÇÀ©Õ¹£¿
ʵÏÖ PHP ÓïÑÔ²»½ö½öÖ»ÊÇʵÏÖÒ»¸öÐéÄâ»úÄÇô¼òµ¥£¬PHP ÓïÑÔ±¾Éí»¹°üÀ¨Á˸÷ÖÖÀ©Õ¹£¬ÕâЩÀ©Õ¹ºÍÓïÑÔÊÇÒ»ÌåµÄ£¬Zend
²»´ÇÐÁÀ͵ØÊµÏÖÁ˸÷ÖÖÄã¿ÉÄÜ»áÓõ½µÄ¹¦ÄÜ¡£Èç¹û·ÖÎö¹ý PHP µÄ´úÂ룬¾Í»á·¢ÏÖËüµÄ C ´úÂë³ýÈ¥¿ÕÐÐ×¢Êͺó¾ÓÈ»»¹ÓÐ80+ÍòÐУ¬¶øÄã²ÂÆäÖÐ
Zend ÒýÇæ²¿·ÖÓжàÉÙ£¿Ö»Óв»µ½10ÍòÐС£
¶ÔÓÚ¿ª·¢ÕßÀ´ËµÕâ²»ÊÇʲô»µÊ£¬µ«¶ÔÓÚÒýÇæÊµÏÖÕßÀ´Ëµ¾ÍºÜ±¯¾çÁË£¬ÎÒÃÇ¿ÉÒÔÄà Java À´½øÐжԱȣ¬Ð´¸ö
Java µÄÐéÄâ»úÖ»ÐèʵÏÖ×Ö½ÚÂë½âÊͼ°Ò»Ð©»ù´¡µÄ JNI µ÷Óã¬Java ¾ø´ó²¿·ÖÄÚÖÿⶼÊÇÓà Java
ʵÏֵģ¬ËùÒÔÈç¹û²»¿¼ÂÇÐÔÄÜÓÅ»¯£¬µ¥´Ó¹¤×÷Á¿¿´£¬ÊµÏÖ PHP ÐéÄâ»ú±È JVM ÒªÄѵö࣬±ÈÈç¾ÍÓÐÈËÓÃ8ǧÐеÄ
TypeScript ʵÏÖÁËÒ»¸ö JVM Doppio¡£
¶ø¶ÔÓÚÕâ¸öÎÊÌ⣬HHVM µÄ½â¾ö°ì·¨ºÜ¼òµ¥£¬ÄǾÍÊÇֻʵÏÖ Facebook ÖÐÓõ½µÄ£¬¶øÇÒͬÑù¿ÉÒÔÏÈÓÃ
HPHPc ÖÐ֮ǰд¹ýµÄ£¬ËùÒÔÎÊÌâÒ²²»´ó¡£
ʵÏÖ Interpreter
½ÓÏÂÀ´ÊÇ Interpreter µÄʵÏÖ£¬ÔÚ½âÎöÍê PHP ºó»áÉú³É HHVM
×Ô¼ºÉè¼ÆµÄÒ»ÖÖ Bytecode£¬´æ´¢ÔÚ ~/.hhvm.hhbc£¨SQLite Îļþ£© ÖÐÒÔ±ãÖØÓã¬ÔÚÖ´ÐÐ
Bytecode ʱºÍ Zend ÀàËÆ£¬Ò²Êǽ«²»Í¬µÄ×Ö½ÚÂë·Åµ½²»Í¬µÄº¯ÊýÖÐȥʵÏÖ£¨ÕâÖÖ·½Ê½ÔÚÐéÄâ»úÖÐÓиöרÃŵijƺô£ºSubroutine
threading£©
Interpreter µÄÖ÷ÌåʵÏÖÔÚ bytecode.cpp ÖУ¬±ÈÈç VMExecutionContext::iopAdd
ÕâÑùµÄ·½·¨£¬×îÖÕÖ´Ðлá¸ù¾Ý²»Í¬ÀàÐÍÀ´Çø·Ö£¬±ÈÈç add ²Ù×÷µÄʵÏÖÊÇÔÚ tv-arith.cpp ÖУ¬ÏÂÃæÕª³ÆäÖеÄһС¶Î
if (c2.m_type == KindOfInt64) return o(c1.m_data.num, c2.m_data.num); if (c2.m_type == KindOfDouble) return o(c1.m_data.num, c2.m_data.dbl); |
ÕýÊÇÒòΪÓÐÁË Interpreter£¬HHVM ÔÚ¶ÔÓÚ PHP Óï·¨µÄÖ§³ÖÉÏ±È HPHPc ÓÐÃ÷ÏԸĽø£¬ÀíÂÛÉÏ×öµ½ÍêÈ«¼æÈݹٷ½
PHP£¬µ«½öÕâô×öÔÚÐÔÄܲ¢²»»á±È Zend ºÃ¶àÉÙ£¬ÓÉÓÚÎÞ·¨È·¶¨±äÁ¿ÀàÐÍ£¬ËùÒÔÐèÒª¼ÓÉÏÀàËÆÉÏÃæµÄÌõ¼þÅжÏÓï¾ä£¬µ«ÕâÑùµÄ´úÂë²»ÀûÓÚÏÖ´ú
CPU µÄÖ´ÐÐÓÅ»¯£¬ÁíÒ»¸öÎÊÌâÊÇÊý¾Ý¶¼ÊÇ boxed µÄ£¬Ã¿´Î¶ÁÈ¡¶¼ÐèҪͨ¹ýÀàËÆ m_data.num
ºÍ m_data.dbl µÄ·½·¨À´¼ä½Ó»ñÈ¡¡£
¶ÔÓÚÕâÑùµÄÎÊÌ⣬¾ÍµÃ¿¿ JIT À´ÓÅ»¯ÁË¡£
ʵÏÖ JIT ¼°ÓÅ»¯
Ê×ÏÈÖµµÃÒ»ÌáµÄÊÇ PHP µÄ JIT ֮ǰ²¢·ÇûÈ˳¢ÊÔ¹ý£º
2008 Äê¾ÍÓÐÈËÓà LLVM ʵÑé¹ý£¬½á¹û»¹±ÈÔÀ´ÂýÁË 21 ±¶¡£¡£¡£
2010 Äê IBM ÈÕ±¾Ñо¿Ôº»ùÓÚËûÃÇµÄ JVM ÐéÄâ»ú´úÂ뿪·¢ÁË P9£¬ÐÔÄÜÊǹٷ½
PHP µÄ 2.5 µ½ 9.5 ±¶£¬¿ÉÒÔ¿´ËûÃǵÄÂÛÎÄ Evaluation of a just-in-time
compiler retrofitted for PHP¡£
2011 Äê Andrei Homescu »ùÓÚ RPython ¿ª·¢¹ý£¬»¹Ð´ÁËÆªÂÛÎÄ
HappyJIT: a tracing JIT compiler for PHP£¬µ«²âÊÔ½á¹ûÓкÃÓлµ£¬²¢²»ÀíÏë¡£
ÄÇô¾¿¾¹Ê²Ã´ÊÇ JIT£¿ÈçºÎʵÏÖÒ»¸ö JIT£¿
ÔÚ¶¯Ì¬ÓïÑÔÖлù±¾É϶¼»áÓиö eval ·½·¨£¬¿ÉÒÔ´«¸øËüÒ»¶Î×Ö·û´®À´Ö´ÐУ¬JIT ×öµÄ¾ÍÊÇÀàËÆµÄÊÂÇ飬ֻ²»¹ýËüҪƴ½Ó²»ÊÇ×Ö·û´®£¬¶øÊDz»Í¬Æ½Ì¨ÏµĻúÆ÷Â룬Ȼºó½øÐÐÖ´ÐУ¬µ«ÈçºÎÓÃ
C À´ÊµÏÖÄØ£¿¿ÉÒԲο¼ Eli дµÄÕâ¸öÈëÃÅÀý×Ó£¬ÒÔÏÂÊÇÎÄÖеÄÒ»¶Î´úÂ룺
unsigned char code[] = { 0x48, 0x89, 0xf8, // mov %rdi, %rax 0x48, 0x83, 0xc0, 0x04, // add $4, %rax 0xc3 // ret }; memcpy(m, code, sizeof(code)); |
È»¶øÊÖ¹¤±àд»úÆ÷ÂëºÜÈÝÒ׳ö´í£¬ËùÒÔ×îºÃµÄÓÐÒ»¸ö¸¨ÖúµÄ¿â£¬±ÈÈçµÄ Mozilla µÄ Nanojit ÒÔ¼°
LuaJIT µÄ DynASM£¬µ« HHVM ²¢Ã»ÓÐʹÓÃÕâЩ£¬¶øÊÇ×Ô¼ºÊµÏÖÁËÒ»¸öÖ»Ö§³Ö x64 µÄ£¨ÁíÍ⻹ÔÚ³¢ÊÔÓÃ
VIXL À´Éú³É ARM 64 λµÄ£©£¬Í¨¹ý mprotect µÄ·½Ê½À´ÈôúÂë¿ÉÖ´ÐС£
µ«ÎªÊ²Ã´ JIT ´úÂë»á¸ü¿ì£¿Äã¿ÉÒÔÏëÏëÆäʵÓà C++ ±àдµÄ´úÂë×îÖÕ±àÒë³öÀ´Ò²ÊÇ»úÆ÷Â룬Èç¹ûÖ»Êǽ«Í¬ÑùµÄ´úÂëÊÖ¶¯×ª³ÉÁË»úÆ÷Â룬ÄǺÍ
GCC Éú³É³öÀ´µÄÓÐÊ²Ã´Çø±ðÄØ£¿ËäÈ»Ç°ÃæÎÒÃÇÌáµ½ÁËһЩÕë¶Ô CPU ʵÏÖÔÀíÀ´ÓÅ»¯µÄ¼¼ÇÉ£¬µ«ÔÚ JIT
ÖиüÖØÒªµÄÓÅ»¯ÊǸù¾ÝÀàÐÍÀ´Éú³ÉÌØ¶¨µÄÖ¸Á´Ó¶ø´ó·ù¼õÉÙÖ¸ÁîÊýºÍÌõ¼þÅжϣ¬ÏÂÃæÕâÕÅÀ´×Ô TraceMonkey
µÄͼ¶Ô´Ë½øÐÐÁ˺ÜÖ±¹ÛµÄ¶Ô±È£¬ºóÃæÎÒÃǽ«¿´µ½ HHVM ÖеľßÌåÀý×Ó£º

HHVM Ê×ÏÈͨ¹ý interpeter À´Ö´ÐУ¬ÄÇËü»áÔÚʱºòʹÓà JIT
ÄØ£¿³£¼ûµÄ JIT ´¥·¢Ìõ¼þÓÐ 2 ÖÖ£º
trace£º¼Ç¼ѻ·Ö´ÐдÎÊý£¬Èç¹û³¬¹ýÒ»¶¨ÊýÁ¿¾Í¶ÔÕâ¶Î´úÂë½øÐÐ JIT
method£º¼Ç¼º¯ÊýÖ´ÐдÎÊý£¬Èç¹û³¬¹ýÒ»¶¨ÊýÁ¿¾Í¶ÔÕû¸öº¯Êý½øÐÐ JIT£¬ÉõÖÁÖ±½Ó
inline
¹ØÓÚÕâÁ½ÖÖ·½·¨ÄÄÖÖ¸üºÃÔÚ Lambada ÉÏÓиöÌû×ÓÒýÀ´Á˸÷·´óÉñµÄÌÖÂÛ£¬ÓÈÆäÊÇ
Mike Pall£¨LuaJIT ×÷Õߣ© ¡¢Andreas Gal£¨Mozilla VP£© ºÍ Brendan
Eich£¨Mozilla CTO£©¶¼·¢±íÁ˺ܶà×Ô¼ºµÄ¹Ûµã£¬ÍƼö´ó¼ÒΧ¹Û£¬ÎÒÕâÀï¾Í²»Ï׳óÁË¡£
ËüÃÇÖ®¼äµÄÇø±ð²»½ö½öÊDZàÒ뷶Χ£¬»¹Óкܶàϸ½ÚÎÊÌ⣬±ÈÈç¶Ô¾Ö²¿±äÁ¿µÄ´¦Àí£¬ÔÚÕâÀï¾Í²»Õ¹¿ªÁË
µ« HHVM ²¢Ã»ÓвÉÓÃÕâÁ½ÖÖ·½Ê½£¬¶øÊÇ×Ô´´ÁËÒ»¸ö½Ð tracelet
µÄ×ö·¨£¬ËüÊǸù¾ÝÀàÐÍÀ´»®·ÖµÄ£¬¿´ÏÂÃæÕâÕÅͼ

¿ÉÒÔ¿´µ½Ëü½«Ò»¸öº¯Êý»®·ÖΪÁË 3 ²¿·Ö£¬ÉÏÃæ 2 ²¿·ÖÊÇÓÃÓÚ´¦Àí $k
ΪÕûÊý»ò×Ö·û´®Á½ÖÖ²»Í¬Çé¿öµÄ£¬ÏÂÃæµÄ²¿·ÖÊÇ·µ»ØÖµ£¬ËùÒÔ¿´ÆðÀ´ËüÖ÷ÒªÊǸù¾ÝÀàÐ͵ı仯Çé¿öÀ´»®·Ö JIT ÇøÓòµÄ£¬¾ßÌåÊÇÈçºÎ·ÖÎöºÍ²ð½â
Tracelet µÄϸ½Ú¿ÉÒԲ鿴 Translator.cpp ÖÐµÄ Translator::analyze
·½·¨£¬ÎÒ»¹Ã»¿Õ¿´£¬ÕâÀï¾Í²»ÌÖÂÛÁË¡£
µ±È»£¬ÒªÊµÏÖ¸ßÐÔÄÜµÄ JIT »¹Ðè½øÐи÷ÖÖ³¢ÊÔºÍÓÅ»¯£¬±ÈÈç×î³õ HHVM ÐÂÔöµÄ tracelet »á·Åµ½Ç°Ã棬Ҳ¾ÍÊǽ«ÉÏͼµÄ
A ºÍ C µ÷»»Î»Ö㬺óÀ´³¢ÊÔÁËһϷŵ½ºóÃæ£¬½á¹ûÐÔÄÜÌáʾÁË 14%£¬ÒòΪ²âÊÔ·¢ÏÖÕâÑù¸üÈÝÒ×ÌáǰÃüÖÐÏìÓ¦µÄÀàÐÍ
JIT µÄÖ´Ðйý³ÌÊÇÊ×ÏȽ« HHBC ת³É SSA (hhbc-translator.cpp)£¬È»ºó¶Ô
SSA ÉÏ×öÓÅ»¯£¨±ÈÈç Copy propagation£©£¬ÔÙÉú³É±¾µØ»úÆ÷Â룬±ÈÈçÔÚ X64 ÏÂÊÇÓÉ translator-x64.cpp
ʵÏֵġ£
ÎÒÃÇÓÃÒ»¸ö¼òµ¥µÄÀý×ÓÀ´¿´¿´ HHVM ×îÖÕÉú³ÉµÄ»úÆ÷ÂëÊÇÔõÑùµÄ£¬±ÈÈçÏÂÃæÕâ¸ö PHP º¯Êý£º
<?php function a($b){ echo $b + 2; } |
±àÒëºóÊÇÕâ¸öÑù×Ó£º
mov rcx,0x7200000
mov rdi,rbp
mov rsi,rbx
mov rdx,0x20
call 0x2651dfb
<HPHP::Transl::traceCallback(HPHP::ActRec*, HPHP::TypedValue*, long, void*)>
cmp BYTE PTR [rbp-0x8],0xa
jne 0xae00306
; Ç°ÃæÊǼì²é²ÎÊýÊÇ·ñÓÐЧ
mov rcx,QWORD PTR [rbp-0x10] ; ÕâÀォ %rcx ±»¸³ÖµÎª1ÁË
mov edi,0x2 ; ½« %edi£¨Ò²¾ÍÊÇ %rdi µÄµÍ32룩¸³ÖµÎª2
add rdi,rcx ; ¼ÓÉÏ %rcx
call 0x2131f1b <HPHP::print_int(long)> ; µ÷Óà print_int º¯Êý£¬ÕâʱµÚÒ»¸ö²ÎÊý %rdi µÄÖµÒѾÊÇ3ÁË
; ºóÃæÔݲ»ÌÖÂÛ
mov BYTE PTR [rbp+0x28],0x8
lea rbx,[rbp+0x20]
test BYTE PTR [r12],0xff
jne 0xae0032a
push QWORD PTR [rbp+0x8]
mov rbp,QWORD PTR [rbp+0x0]
mov rdi,rbp
mov rsi,rbx
mov rdx,QWORD PTR [rsp]
call 0x236b70e <HPHP::JIT::traceRet(HPHP::ActRec*, HPHP::TypedValue*, void*)>
ret |
¶ø HPHP::print_int º¯ÊýµÄʵÏÖÊÇÕâÑùµÄ£º
void print_int(int64_t i) { char buf[256]; snprintf(buf, 256, "%" PRId64, i); echo(buf); TRACE(1, "t-x64 output(int): %" PRId64 "\n", i); } |
¿ÉÒÔ¿´µ½ HHVM ±àÒë³öÀ´µÄ´úÂëÖ±½ÓʹÓÃÁË int64_t£¬±ÜÃâÁË interpreter ÖÐÐèÒªÅжϲÎÊýºÍ¼ä½ÓÈ¡Êý¾ÝµÄÎÊÌ⣬´Ó¶øÃ÷ÏÔÌáÉýÁËÐÔÄÜ£¬×îÖÕÉõÖÁ×öµ½Á˺Í
C ±àÒë³öÀ´µÄ´úÂëÇø±ð²»´ó¡£
ÐèҪעÒ⣺HHVM ÔÚ server mode Ï£¬Ö»Óг¬¹ý12¸öÇëÇó¾Í²Å»á´¥·¢ JIT£¬Æô¶¯¹ý HHVM
ʱ¿ÉÒÔͨ¹ý¼ÓÉÏÈçϲÎÊýÀ´ÈÃËüÊ×´ÎÇëÇó¾ÍʹÓà JIT£º
-v Eval.JitWarmupRequests=0 |
ËùÒÔÔÚ²âÊÔÐÔÄÜʱÐèҪעÒ⣬ÔËÐÐÒ»Á½´Î¾ÍÄÃÀ´¶Ô±ÈÊÇ¿´²»³öЧ¹ûµÄ¡£
ÀàÐÍÍÆµ¼ºÜÂé·³£¬»¹ÊÇ±ÆÆÈ³ÌÐòԱдÇå³þ°É
JIT µÄ¹Ø¼üÊDz²âÀàÐÍ£¬Òò´Ëij¸ö±äÁ¿µÄÀàÐÍÒªÊÇÀϱä¾ÍºÜÄÑÓÅ»¯£¬ÓÚÊÇ HHVM
µÄ¹¤³Ìʦ¿ªÊ¼¿¼ÂÇÔÚ PHP Óï·¨ÉÏ×öÊֽţ¬¼ÓÉÏÀàÐ͵ÄÖ§³Ö£¬ÍƳöÁËÒ»¸öÐÂÓïÑÔ - Hack£¨Í²ÛÒ»ÏÂÕâÃû×ÖÕæ²»ÀûÓÚ
SEO£©£¬ËüµÄÑù×ÓÈçÏ£º
<?hh class Point2 { public float $x, $y; function __construct(float $x, float $y) { $this->x = $x; $this->y = $y; } } |
×¢Òâµ½ float ¹Ø¼ü×ÖÁËô£¿ÓÐÁ˾²Ì¬ÀàÐÍ¿ÉÒÔÈà HHVM ¸üºÃµØÓÅ»¯ÐÔÄÜ£¬µ«ÕâÒ²Òâζ×ÅºÍ PHP
Óï·¨²»¼æÈÝ£¬Ö»ÄÜʹÓà HHVM¡£
ÆäʵÎÒ¸öÈËÈÏΪÕâÑù×ö×î´óµÄÓŵãÊÇÈôúÂë¸ü¼ÓÒ×¶®£¬¼õÉÙÎÞÒâµÄ·¸´í£¬¾ÍÏñ Dart ÖеĿÉÑ¡ÀàÐÍÒ²ÊÇÕâ¸ö³õÖÔ£¬Í¬Ê±»¹·½±ãÁË
IDE ʶ±ð£¬¾Ý˵ Facebook »¹ÔÚ¿ª·¢Ò»¸ö»ùÓÚ Web µÄ IDE£¬ÄÜÐͬ±à¼´úÂ룬¿ÉÒÔÆÚ´ýһϡ£
Äã»áʹÓà HHVM ô£¿
×ܵÄÀ´Ëµ£¬±ÈÆð֮ǰµÄ HPHPc£¬ÎÒÈÏΪ HHVM ÊÇÖµµÃÒ»ÊԵģ¬ËüÊÇÕæÕýµÄÐéÄâ»ú£¬Äܹ»¸üºÃµØÖ§³Ö¸÷ÖÖ
PHP µÄÓï·¨£¬ËùÒԸ͝³É±¾²»»á¸ü¸ß£¬¶øÇÒÒòΪÄÜÎÞ·ìÇл»µ½¹Ù·½ PHP °æ±¾£¬ËùÒÔ¿ÉÒÔͬʱÆô¶¯ FPM
À´ËæÊ±´ýÃü£¬HHVM »¹ÓÐ FastCGI ½Ó¿Ú·½±ãµ÷Óã¬Ö»Òª×öºÃÓ¦¼±±¸°¸£¬·çÏÕÊǿɿص쬴ӳ¤Ô¶À´¿´ÊǺÜÓÐÏ£ÍûµÄ¡£
ÐÔÄܾ¿¾¹ÄÜÌáÉý¶àÉÙÎÒÎÞ·¨È·¶¨£¬ÐèÒªÄÃ×Ô¼ºµÄÒµÎñ´úÂëÀ´½øÐÐÕæÊµ²âÊÔ£¬ÕâÑù²ÅÄÜÕæÕýÇå³þ HHVM ÄÜ´øÀ´¶àÉÙÊÕÒæ£¬ÓÈÆäÊǶÔÕûÌåÐÔÄÜÌáÉýµ½µ×ÓжàÉÙ£¬Ö»ÓÐÄõ½Õâ¸öÊý¾Ý²ÅÄÜ×ö¾ö²ß¡£
×îºóÕûÀíһϿÉÄÜ»áÓöµ½µÄÎÊÌ⣬Óмƻ®Ê¹ÓõĿÉÒԲο¼£º
1.À©Õ¹ÎÊÌ⣺Èç¹ûÓõ½ÁË PHP À©Õ¹£¬¿Ï¶¨ÊÇÒªÖØÐ´µÄ£¬²»¹ý HHVM
À©Õ¹Ð´ÆðÀ´±È Zend Òª¼òµ¥µÄ¶à£¬¾ßÌåϸ½Ú¿ÉÒÔ¿´ wiki ÉϵÄÀý×Ó¡£
2.HHVM Server µÄÎȶ¨ÐÔÎÊÌ⣺ÕâÖÖ¶àÏ̵߳ļܹ¹ÔËÐÐÒ»¶Îʱ¼ä¿ÉÄÜ»á³öÏÖÄÚ´æÐ¹Â¶ÎÊÌ⣬»òÕßij¸öûдºÃµÄ
PHP Ö±½Óµ¼ÖÂÕû¸ö½ø³Ì¹Òµô£¬ËùÒÔÐèҪעÒâÕâ·½ÃæµÄ²âÊÔºÍÈÝÔÖ´ëÊ©¡£
3.ÎÊÌâÐÞ¸´À§ÄÑ£ºHHVM ÔÚ³öÏÖÎÊÌâʱ½«±È Zend ÄÑÐÞ¸´£¬ÓÈÆäÊÇ
JIT µÄ´úÂ룬ֻÄÜÆÚÍûËü±È½ÏÎȶ¨ÁË¡£
P.S. ÆäʵÎÒÖ»Á˽â»ù±¾µÄÐéÄâ»ú֪ʶ£¬Ò²Ã»Ð´¹ý¼¸ÐÐ PHP ´úÂ룬ºÜ¶à¶«Î÷¶¼ÊÇдÕâÆªÎÄÕÂʱÁÙʱȥÕÒ×ÊÁϵģ¬ÓÉÓÚʱ¼ä²Ö´ÙˮƽÓÐÏÞ£¬±ØÈ»»áÓв»ÕýÈ·µÄµØ·½£¬»¶Ó´ó¼ÒÆÀÂ۴ͽÌ
:)
2014Äê1Ô²¹³ä£ºÄ¿Ç° HHVM Ôڱɳ§µÄÍÆ¹ãÊÆÍ·ºÜ²»´í£¬ÍƼö´ó¼ÒÔÚ2014Äê³¢ÊÔһϣ¬ÓÈÆäÊÇÏÖÔÚ¼æÈÝÐÔ²âÊÔÒѾ´ïµ½98.58%ÁË£¬Ð޸ijɱ¾½øÒ»²½¼õС¡£
|