Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
PHP7¸ïÐÂÓëÐÔÄÜÓÅ»¯
 
À´Ô´£º21CTOÉçÇø ×÷ÕߣºÓÈÓêϪ ·¢²¼ÓÚ 2015-9-22
  3067  次浏览      27
 

ÕªÒª£ºPHPÒѾ­×ß¹ýÁË20ÄêµÄÀúÊ·£¬Ö±µ½½ñÌ죬PHP7¶¼·¢²¼ÁËRC°æ£¬¾Ý˵£¬PHP7Õýʽ°æÓ¦¸Ã»áÔÚ2015Äê11Ô·Ý×óÓÒ·¢²¼¡£PHP7¶ÔÓÚÉÏÒ»¸öϵÁеÄPHP5.*£¬¿ÉÒÔ˵ÊÇÒ»¸ö´ó¹æÄ£µÄ¸ïУ¬ÓÈÆäÊÇÔÚÐÔÄÜ·½ÃæÊµÏÖ¿çԽʽµÄ´ó·ùÌáÉý¡£

ÓÐÐÒ²ÎÓë2015ÄêµÄPHP¼¼Êõ·å»á£¨PHPCON£©£¬ÌýÁËÄñ¸ç£¨»ÝÐÂå·£©µÄ¹ØÓÚPHP7µÄÐÂÌØÐÔºÍÐÔÄÜÓÅ»¯µÄ·ÖÏí£¬Ò»Çж¼ÁîÈ˸е½¼¤¶¯¡£Äñ¸çÊǹúÄÚ×îȨÍþµÄPHPר¼Ò£¬ËûµÄ·ÖÏíÓкܶà·Ç³£ÓмÛÖµµÄ¶«Î÷£¬ÎÒͨ¹ýÕûÀí·ÖÏíµÄPPTºÍÊÕ¼¯Ïà¹Ø×ÊÁÏ£¬ÕûÀíΪÕâÆª½â¶ÁÐÔÖʵļ¼ÊõÎÄÕ£¬Ï£ÍûÄܸø×öPHP¿ª·¢µÄͬѧһЩ°ïÖú¡£

PHPÒѾ­×ß¹ýÁË20ÄêµÄÀúÊ·£¬Ö±µ½½ñÌ죬PHP7¶¼·¢²¼ÁËRC°æ£¬¾Ý˵£¬PHP7Õýʽ°æÓ¦¸Ã»áÔÚ2015Äê11Ô·Ý×óÓÒ·¢²¼¡£PHP7¶ÔÓÚÉÏÒ»¸öϵÁеÄPHP5.*£¬¿ÉÒÔ˵ÊÇÒ»¸ö´ó¹æÄ£µÄ¸ïУ¬ÓÈÆäÊÇÔÚÐÔÄÜ·½ÃæÊµÏÖ¿çԽʽµÄ´ó·ùÌáÉý¡£

PHPÊÇÒ»ÖÖÔÚÈ«Çò·¶Î§ÄÚ±»¹ã·ºÊ¹ÓõÄWeb¿ª·¢ÓïÑÔ£¬PHP7µÄ¸ïÐÂÒ²µ±È»»á¸øÕâЩWeb·þÎñ´øÀ´¸üÉî¿ÌµÄ±ä»¯¡£ÕâÀïÒýÓÃÄñ¸çPPTÖеÄÒ»¸öͼ±í£¨82%µÄWebÕ¾µãÓÐʹÓÃPHP×÷Ϊ¿ª·¢ÓïÑÔ£©£º

£¨×¢£ºÒ»¸öwebÕ¾µã¿ÉÒÔ»áʹÓöàÖÖÓïÑÔ×÷ΪËüµÄ¿ª·¢ÓïÑÔ£©

£¨×¢£º±¾Îĺ¬Óв»ÉÙ´ÓÄñ¸çPPTÀïµÄ½ØÍ¼£¬Í¼Æ¬°æÈ¨¹éÄñ¸çËùÓУ©

ÎÒÃÇÏÈ¿´¿´Á½Õż¤¶¯ÈËÐĵÄÐÔÄܲâÊÔ½á¹ûͼ£º

Benchmark¶Ô±È£¨Í¼Æ¬À´×ÔÓÚPPT£©£º

PHP7µÄÐÔÄܲâÊÔ½á¹û£¬ÐÔÄÜѹ²â½á¹û£¬ºÄʱ´Ó2.991Ͻµµ½1.186£¬´ó·ù¶ÈϽµ60%¡£

WordPressµÄQPSѹ²â£¨Í¼Æ¬À´×ÔÓÚPPT£©£º

¶øÔÚWordPressÏîÄ¿ÖУ¬PHP7¶Ô±ÈPHP5.6£¬QPSÌáÉý2.77±¶¡£

¿´ÍêÁîÈ˼¤¶¯µÄÐÔÄܲâÊÔ½á¹û¶Ô±È£¬ÎÒÃǾͽøÈëÕýÌâ¹þ¡£PHP7µÄÐÂÔöÌØÐԺܶ࣬²»¹ý£¬ÎÒÃÇ»á¸ü¾Û½¹ÓÚÄÇЩÖ÷ÒªµÄ±ä»¯¡£

Ò»¡¢ÐÂÔöÌØÐԺ͸ıä

1. ±êÁ¿ÀàÐͺͷµ»ØÀàÐÍÉùÃ÷£¨Scalar Type Declarations & Scalar Type Declarations£©

PHPÓïÑÔÒ»¸ö·Ç³£ÖØÒªµÄÌØµã¾ÍÊÇ¡°ÈõÀàÐÍ¡±£¬ËüÈÃPHPµÄ³ÌÐò±äµÃ·Ç³£ÈÝÒ×±àд£¬ÐÂÊÖ½Ó´¥PHPÄܹ»¿ìËÙÉÏÊÖ£¬²»¹ý£¬ËüÒ²°éËæ×ÅһЩÕùÒé¡£Ö§³Ö±äÁ¿ÀàÐ͵͍Ò壬¿ÉÒÔ˵ÊǸïÐÂÐÔÖʵı仯£¬PHP¿ªÊ¼ÒÔ¿ÉÑ¡µÄ·½Ê½Ö§³ÖÀàÐͶ¨Òå¡£³ý´ËÖ®Í⣬»¹ÒýÈëÁËÒ»¸ö¿ª¹ØÖ¸Áîdeclare(strict_type=1);£¬µ±Õâ¸öÖ¸ÁîÒ»µ©¿ªÆô£¬½«»áÇ¿ÖÆµ±Ç°ÎļþϵijÌÐò×ñÑ­ÑϸñµÄº¯Êý´«²ÎÀàÐͺͷµ»ØÀàÐÍ¡£

ÀýÈçÒ»¸öaddº¯Êý¼ÓÉÏÀàÐͶ¨Ò壬¿ÉÒÔд³ÉÕâÑù£º

Èç¹ûÅäºÏÇ¿ÖÆÀàÐÍ¿ª¹ØÖ¸ÁÔò¿ÉÒÔ±äΪÕâÑù£º

Èç¹û²»¿ªÆôstrict_type£¬PHP½«»á³¢ÊÔ°ïÄãת»»³ÉÒªÇóµÄÀàÐÍ£¬¶ø¿ªÆôÖ®ºó£¬»á¸Ä±äPHP¾Í²»ÔÙ×öÀàÐÍת»»£¬ÀàÐͲ»Æ¥Åä¾Í»áÅ׳ö´íÎó¡£¶ÔÓÚϲ»¶¡°Ç¿ÀàÐÍ¡±ÓïÑÔµÄͬѧÀ´Ëµ£¬ÕâÊÇÒ»´ó¸£Òô¡£

¸üΪÏêϸµÄ½éÉÜ£ºPHP7±êÁ¿ÀàÐÍÉùÃ÷RFC[·­Òë>

2. ¸ü¶àµÄError±äΪ¿É²¶»ñµÄException

PHP7ʵÏÖÁËÒ»¸öÈ«¾ÖµÄthrowable½Ó¿Ú£¬Ô­À´µÄExceptionºÍ²¿·ÖError¶¼ÊµÏÖÁËÕâ¸ö½Ó¿Ú£¨interface£©£¬ ÒԽӿڵķ½Ê½¶¨ÒåÁËÒì³£µÄ¼Ì³Ð½á¹¹¡£ÓÚÊÇ£¬PHP7Öиü¶àµÄError±äΪ¿É²¶»ñµÄException·µ»Ø¸ø¿ª·¢Õߣ¬Èç¹û²»½øÐв¶»ñÔòΪError£¬Èç¹û²¶»ñ¾Í±äΪһ¸ö¿ÉÔÚ³ÌÐòÄÚ´¦ÀíµÄException¡£ÕâЩ¿É±»²¶»ñµÄErrorͨ³£¶¼ÊDz»»á¶Ô³ÌÐòÔì³ÉÖÂÃüÉ˺¦µÄError£¬ÀýÈ纯Êý²»´æ¡£PHP7½øÒ»²½·½±ã¿ª·¢Õß´¦Àí£¬Èÿª·¢Õß¶Ô³ÌÐòµÄÕÆ¿ØÄÜÁ¦¸üÇ¿¡£ÒòΪÔÚĬÈÏÇé¿öÏ£¬Error»áÖ±½Óµ¼Ö³ÌÐòÖжϣ¬¶øPHP7ÔòÌṩ²¶»ñ²¢ÇÒ´¦ÀíµÄÄÜÁ¦£¬ÈóÌÐò¼ÌÐøÖ´ÐÐÏÂÈ¥£¬Îª³ÌÐòÔ±Ìṩ¸üÁé»îµÄÑ¡Ôñ¡£

ÀýÈ磬ִÐÐÒ»¸öÎÒÃDz»È·¶¨ÊÇ·ñ´æÔڵĺ¯Êý£¬PHP5¼æÈݵÄ×ö·¨ÊÇÔÚº¯Êý±»µ÷ÓÃ֮ǰ׷¼ÓµÄÅжÏfunction_exist£¬¶øPHP7ÔòÖ§³Ö²¶»ñExceptionµÄ´¦Àí·½Ê½¡£

ÈçÏÂͼÖеÄÀý×Ó£¨½ØÍ¼À´Ô´ÓÚPPTÄÚ£©£º

3. AST£¨Abstract Syntax Tree£¬³éÏóÓï·¨Ê÷£©

ASTÔÚPHP±àÒë¹ý³Ì×÷Ϊһ¸öÖмä¼þµÄ½ÇÉ«£¬Ìæ»»Ô­À´Ö±½Ó´Ó½âÊÍÆ÷ͳöopcodeµÄ·½Ê½£¬ÈýâÊÍÆ÷£¨parser£©ºÍ±àÒëÆ÷£¨compliler£©½âñ¿ÉÒÔ¼õÉÙһЩHack´úÂ룬ͬʱ£¬ÈÃʵÏÖ¸üÈÝÒ×Àí½âºÍ¿Éά»¤¡£

PHP 5£º

PHP 7£º

¸ü¶àASTÐÅÏ¢£ºhttps://wiki.php.net/rfc/abstract_syntax_tree

4. Native TLS£¨Native Thread local storage£¬Ô­ÉúÏ̱߳¾µØ´æ´¢£©

PHPÔÚ¶àÏß³ÌģʽÏ£¨ÀýÈ磬Web·þÎñÆ÷ApacheµÄwokerºÍeventģʽ£¬¾ÍÊǶàỊ̈߳©£¬ÐèÒª½â¾ö¡°Ḭ̈߳²È«¡±£¨TS£¬Thread Safe£©µÄÎÊÌ⣬ÒòΪÏß³ÌÊǹ²Ïí½ø³ÌµÄÄÚ´æ¿Õ¼äµÄ£¬ËùÒÔÿ¸öÏ̱߳¾ÉíÐèҪͨ¹ýijÖÖ·½Ê½£¬¹¹½¨Ë½ÓеĿռäÀ´±£´æ×Ô¼ºµÄ˽ÓÐÊý¾Ý£¬±ÜÃâºÍÆäËûÏß³ÌÏ໥ÎÛȾ¡£¶øPHP5²ÉÓõķ½Ê½£¬¾ÍÊÇά»¤Ò»¸öÈ«¾Ö´óÊý×飬Ϊÿһ¸öÏ̷߳ÖÅäÒ»·Ý¶ÀÁ¢µÄ´æ´¢¿Õ¼ä£¬Ïß³Ìͨ¹ý¸÷×ÔÓµÓеÄkeyÖµÀ´·ÃÎÊÕâ¸öÈ«¾ÖÊý¾Ý×é¡£

¶øÕâ¸ö¶ÀÓеÄkeyÖµÔÚPHP5ÖÐÐèÒª´«µÝ¸øÃ¿Ò»¸öÐèÒªÓõ½È«¾Ö±äÁ¿µÄº¯Êý£¬PHP7ÈÏΪÕâÖÖ´«µÝµÄ·½Ê½²¢²»ÓѺ㬲¢ÇÒ´æÔÚһЩÎÊÌâ¡£Òò¶ø£¬³¢ÊÔ²ÉÓÃÒ»¸öÈ«¾ÖµÄÏß³ÌÌØ¶¨±äÁ¿À´±£´æÕâ¸ökeyÖµ¡£

Ïà¹ØµÄNative TLSÎÊÌ⣺https://wiki.php.net/rfc/native-tls

5. ÆäËûÐÂÌØÐÔ

PHP 7ÐÂÌØÐԺͱ仯²»ÉÙ£¬ÎÒÃÇÕâÀï²¢²»È«²¿Õ¹¿ªÀ´Ï¸Ëµ¹þ¡£

  • Int64Ö§³Ö£¬Í³Ò»²»Í¬Æ½Ì¨ÏµÄÕûÐͳ¤¶È£¬×Ö·û´®ºÍÎļþÉÏ´«¶¼Ö§³Ö´óÓÚ2GB¡£
  • ͳһ±äÁ¿Óï·¨£¨Uniform variable syntax£©¡£
  • foreach±íÏÖÐÐΪһÖ£¨Consistently foreach behaviors£©
  • еIJÙ×÷·û <=>, ??
  • Unicode×Ö·û¸ñʽ֧³Ö£¨\u{xxxxx}£©
  • ÄäÃûÀàÖ§³Ö£¨Anonymous Class£©
  • ¡­¡­

¶þ¡¢¿çԽʽµÄÐÔÄÜÍ»ÆÆ£ºÈ«ËÙǰ½ø

1. JITÓëÐÔÄÜ

Just In Time£¨¼´Ê±±àÒ룩ÊÇÒ»ÖÖÈí¼þÓÅ»¯¼¼Êõ£¬Ö¸ÔÚÔËÐÐʱ²Å»áÈ¥±àÒë×Ö½ÚÂëΪ»úÆ÷Âë¡£´ÓÖ±¾õ³ö·¢£¬ÎÒÃǶ¼ºÜÈÝÒ×ÈÏΪ£¬»úÆ÷ÂëÊǼÆËã»úÄܹ»Ö±½Óʶ±ðºÍÖ´Ðеģ¬±ÈÆðZend¶ÁÈ¡opcodeÖðÌõÖ´ÐÐЧÂÊ»á¸ü¸ß¡£ÆäÖУ¬HHVM£¨HipHop Virtual Machine£¬HHVMÊÇÒ»¸öFacebook¿ªÔ´µÄPHPÐéÄâ»ú£©¾Í²ÉÓÃJIT£¬ÈÃËûÃǵÄPHPÐÔÄܲâÊÔÌáÉýÁËÒ»¸öÊýÁ¿¼¶£¬·Å³öÒ»¸öÁîÈËÕ𾪵IJâÊÔ½á¹û£¬Ò²ÈÃÎÒÃÇÖ±¹ÛµØÈÏΪJITÊÇÒ»Ïîµãʯ³É½ðµÄÇ¿´ó¼¼Êõ¡£

¶øÊµ¼ÊÉÏ£¬ÔÚ2013ÄêµÄʱºò£¬Äñ¸çºÍDmitry£¨PHPÓïÑÔÄں˿ª·¢ÕßÖ®Ò»£©¾ÍÔø¾­ÔÚPHP5.5µÄ°æ±¾ÉÏ×ö¹ýÒ»¸öJITµÄ³¢ÊÔ£¨²¢Ã»Óз¢²¼£©¡£PHP5.5µÄÔ­À´µÄÖ´ÐÐÁ÷³Ì£¬Êǽ«PHP´úÂëͨ¹ý´Ê·¨ºÍÓï·¨·ÖÎö£¬±àÒë³Éopcode×Ö½ÚÂ루¸ñʽºÍ»ã±àÓеãÏñ£©£¬È»ºó£¬ZendÒýÇæ¶ÁÈ¡ÕâЩopcodeÖ¸ÁÖðÌõ½âÎöÖ´ÐС£

¶øËûÃÇÔÚopcode»·½ÚºóÒýÈëÁËÀàÐÍÍÆ¶Ï£¨TypeInf£©£¬È»ºóͨ¹ýJITÉú³ÉByteCodes£¬È»ºóÔÙÖ´ÐС£

ÓÚÊÇ£¬ÔÚbenchmark£¨²âÊÔ³ÌÐò£©Öеõ½ÁîÈËÐ˷ܵĽá¹û£¬ÊµÏÖJITºóÐÔÄܱÈPHP5.5ÌáÉýÁË8±¶¡£È»¶ø£¬µ±ËûÃǰÑÕâ¸öÓÅ»¯·ÅÈ뵽ʵ¼ÊµÄÏîÄ¿WordPress£¨Ò»¸ö¿ªÔ´²©¿ÍÏîÄ¿£©ÖУ¬È´¼¸ºõ¿´²»¼ûÐÔÄܵÄÌáÉý£¬µÃµ½ÁËÒ»¸öÁîÈ˷ѽâµÄ²âÊÔ½á¹û¡£

ÓÚÊÇ£¬ËûÃÇʹÓÃLinuxϵÄprofileÀàÐ͹¤¾ß£¬¶Ô³ÌÐòÖ´ÐнøÐÐCPUºÄʱռÓ÷ÖÎö¡£

Ö´ÐÐ100´ÎWordPressµÄCPUÏûºÄµÄ·Ö²¼£¨½ØÍ¼À´×ÔPPT£©£º

×¢½â£º

21%CPUʱ¼ä»¨·ÑÔÚÄÚ´æ¹ÜÀí¡£

12%CPUʱ¼ä»¨·ÑÔÚhash table²Ù×÷£¬Ö÷ÒªÊÇPHPÊý×éµÄÔöɾ¸Ä²é¡£

30%CPUʱ¼ä»¨·ÑÔÚÄÚÖú¯Êý£¬ÀýÈçstrlen¡£

25%CPUʱ¼ä»¨·ÑÔÚVM£¨ZendÒýÇæ£©¡£

¾­¹ý·ÖÎöÖ®ºó£¬µÃµ½ÁËÁ½¸ö½áÂÛ£º

£¨1£©JITÉú³ÉµÄByteCodesÈç¹ûÌ«´ó£¬»áÒýÆðCPU»º´æÃüÖÐÂÊϽµ£¨CPU Cache Miss£©

ÔÚPHP5.5µÄ´úÂëÀÒòΪ²¢Ã»ÓÐÃ÷ÏÔÀàÐͶ¨Ò壬ֻÄÜ¿¿ÀàÐÍÍÆ¶Ï¡£¾¡¿ÉÄܽ«¿ÉÒÔÍÆ¶Ï³öÀ´µÄ±äÁ¿ÀàÐÍ£¬¶¨Òå³öÀ´£¬È»ºó£¬½áºÏÀàÐÍÍÆ¶Ï£¬½«·Ç¸ÃÀàÐ͵ķÖÖ§´úÂëÈ¥µô£¬Éú³ÉÖ±½Ó¿ÉÖ´ÐеĻúÆ÷Â롣Ȼ¶ø£¬ÀàÐÍÍÆ¶Ï²»ÄÜÍÆ¶Ï³öÈ«²¿ÀàÐÍ£¬ÔÚWordPressÖУ¬Äܹ»ÍƶϳöÀ´µÄÀàÐÍÐÅÏ¢Ö»Óв»µ½30%£¬Äܹ»¼õÉٵķÖÖ§´úÂëÓÐÏÞ¡£µ¼ÖÂJITÒÔºó£¬Ö±½ÓÉú³É»úÆ÷Â룬Éú³ÉµÄByteCodesÌ«´ó£¬×îÖÕÒýÆðCPU»º´æÃüÖдó·ù¶ÈϽµ£¨CPU Cache Miss£©¡£

CPU»º´æÃüÖÐÊÇÖ¸£¬CPUÔÚ¶ÁÈ¡²¢Ö´ÐÐÖ¸ÁîµÄ¹ý³ÌÖУ¬Èç¹ûÐèÒªµÄÊý¾ÝÔÚCPUÒ»¼¶»º´æ£¨L1£©ÖжÁÈ¡²»µ½£¬¾Í²»µÃ²»ÍùϼÌÐøÑ°ÕÒ£¬Ò»Ö±µ½¶þ¼¶»º´æ£¨L2£©ºÍÈý¼¶»º´æ£¨L3£©£¬×îÖջ᳢ÊÔµ½ÄÚ´æÇøÓòÀïѰÕÒËùÐèÒªµÄÖ¸ÁîÊý¾Ý£¬¶øÄÚ´æºÍCPU»º´æÖ®¼äµÄ¶ÁÈ¡ºÄʱ²î¾à¿ÉÒÔ´ïµ½100±¶¼¶±ð¡£ËùÒÔ£¬ByteCodesÈç¹û¹ý´ó£¬Ö´ÐÐÖ¸ÁîÊýÁ¿¹ý¶à£¬µ¼Ö¶༶»º´æÎÞ·¨ÈÝÄÉÈç´ËÖ®¶àµÄÊý¾Ý£¬²¿·ÖÖ¸Á²»µÃ²»±»´æ·Åµ½ÄÚ´æÇøÓò¡£

CPUµÄ¸÷¼¶»º´æµÄ´óСҲÊÇÓÐÏ޵ģ¬ÏÂͼÊÇIntel i7 920µÄÅäÖÃÐÅÏ¢£º

Òò´Ë£¬CPU»º´æÃüÖÐÂÊϽµ»á´øÀ´ÑÏÖØµÄºÄʱÔö¼Ó£¬ÁíÒ»·½Ã棬JIT´øÀ´µÄÐÔÄÜÌáÉý£¬Ò²±»ËüËùµÖÏûµôÁË¡£

ͨ¹ýJIT£¬¿ÉÒÔ½µµÍVMµÄ¿ªÏú£¬Í¬Ê±£¬Í¨¹ýÖ¸ÁîÓÅ»¯£¬¿ÉÒÔ¼ä½Ó½µµÍÄÚ´æ¹ÜÀíµÄ¿ª·¢£¬ÒòΪ¿ÉÒÔ¼õÉÙÄÚ´æ·ÖÅäµÄ´ÎÊý¡£È»¶ø£¬¶ÔÓÚÕæÊµµÄWordPressÏîÄ¿À´Ëµ£¬CPUºÄʱֻÓÐ25%ÔÚVMÉÏ£¬Ö÷ÒªµÄÎÊÌâºÍÆ¿¾±Êµ¼ÊÉϲ¢²»ÔÚVMÉÏ¡£Òò´Ë£¬JITµÄÓÅ»¯¼Æ»®£¬×îºóûÓб»ÁÐÈë¸Ã°æ±¾µÄPHP7ÌØÐÔÖС£²»¹ý£¬ËüºÜ¿ÉÄÜ»áÔÚ¸üºóÃæµÄ°æ±¾ÖÐʵÏÖ£¬ÕâµãÒ²·Ç³£ÖµµÃÎÒÃÇÆÚ´ý¹þ¡£

£¨2£©JITÐÔÄܵÄÌáÉýЧ¹ûÈ¡¾öÓÚÏîÄ¿µÄʵ¼ÊÆ¿¾±

JITÔÚbenchmarkÖÐÓдó·ù¶ÈµÄÌáÉý£¬ÊÇÒòΪ´úÂëÁ¿±È½ÏÉÙ£¬×îÖÕÉú³ÉµÄByteCodesÒ²±È½ÏС£¬Í¬Ê±Ö÷ÒªµÄ¿ªÏúÊÇÔÚVMÖС£¶øÓ¦ÓÃÔÚWordPressʵ¼ÊÏîÄ¿Öв¢Ã»ÓÐÃ÷ÏÔµÄÐÔÄÜÌáÉý£¬Ô­ÒòWordPressµÄ´úÂëÁ¿Òª±Èbenchmark´óµÃ¶à£¬ËäÈ»JIT½µµÍÁËVMµÄ¿ªÏú£¬µ«ÊÇÒòΪByteCodesÌ«´ó¶øÓÖÒýÆðCPU»º´æÃüÖÐϽµºÍ¶îÍâµÄÄڴ濪Ïú£¬×îÖÕ±ä³ÉûÓÐÌáÉý¡£

²»Í¬ÀàÐ͵ÄÏîÄ¿»áÓв»Í¬µÄCPU¿ªÏú±ÈÀý£¬Ò²»áµÃµ½²»Í¬µÄ½á¹û£¬ÍÑÀëʵ¼ÊÏîÄ¿µÄÐÔÄܲâÊÔ£¬²¢²»¾ßÓкܺõĴú±íÐÔ¡£

2. ZvalµÄ¸Ä±ä

PHPµÄ¸÷ÖÖÀàÐ͵ıäÁ¿£¬Æäʵ£¬ÕæÕý´æ´¢µÄÔØÌå¾ÍÊÇZval£¬ËüÌØµãÊǺ£Äɰٴ¨£¬ÓÐÈÝÄË´ó¡£´Ó±¾ÖÊÉÏ¿´£¬ËüÊÇCÓïÑÔʵÏÖµÄÒ»¸ö½á¹¹Ì壨struct£©¡£¶ÔÓÚдPHPµÄͬѧ£¬¿ÉÒÔ½«Ëü´ÖÂÔÀí½âΪÊÇÒ»¸öÀàËÆarrayÊý×éµÄ¶«Î÷¡£

PHP5µÄZval£¬ÄÚ´æÕ¼¾Ý24¸ö×Ö½Ú£¨½ØÍ¼À´×ÔPPT£©£º

PHP7µÄZval£¬ÄÚ´æÕ¼¾Ý16¸ö×Ö½Ú£¨½ØÍ¼À´×ÔPPT£©£º

Zval´Ó24¸ö×Ö½ÚϽµµ½16¸ö×Ö½Ú£¬ÎªÊ²Ã´»áϽµÄØ£¬ÕâÀïÐèÒª²¹Ò»µãµãµÄCÓïÑÔ»ù´¡£¬¸¨Öú²»ÊìϤCµÄͬѧÀí½â¡£structºÍunion£¨ÁªºÏÌ壩Óе㲻ͬ£¬StructµÄÿһ¸ö³ÉÔ±±äÁ¿Òª¸÷×ÔÕ¼¾ÝÒ»¿é¶ÀÁ¢µÄÄÚ´æ¿Õ¼ä£¬¶øunionÀïµÄ³ÉÔ±±äÁ¿Êǹ²ÓÃÒ»¿éÄÚ´æ¿Õ¼ä£¨Ò²¾ÍÊÇ˵ÐÞ¸ÄÆäÖÐÒ»¸ö³ÉÔ±±äÁ¿£¬¹«Óпռä¾Í±»ÐÞ¸ÄÁË£¬ÆäËû³ÉÔ±±äÁ¿µÄ¼Ç¼Ҳ¾ÍûÓÐÁË£©¡£Òò´Ë£¬ËäÈ»³ÉÔ±±äÁ¿¿´ÆðÀ´¶àÁ˲»ÉÙ£¬µ«ÊÇʵ¼ÊÕ¼¾ÝµÄÄÚ´æ¿Õ¼äȴϽµÁË¡£

³ý´ËÖ®Í⣬»¹Óб»Ã÷ÏԸıäµÄÌØÐÔ£¬²¿·Ö¼òµ¥ÀàÐͲ»ÔÙʹÓÃÒýÓá£

Zval½á¹¹Í¼£¨À´Ô´ÓÚPPTÖУ©£º

ͼÖÐZvalµÄÓÉ2¸ö64bits£¨1×Ö½Ú=8bit£¬bitÊÇ¡°Î»¡±£©×é³É£¬Èç¹û±äÁ¿ÀàÐÍÊÇlong¡¢bealoonÕâЩ³¤¶È²»³¬¹ý64bitµÄ£¬ÔòÖ±½Ó´æ´¢µ½valueÖУ¬¾ÍûÓÐÏÂÃæµÄÒýÓÃÁË¡£µ±±äÁ¿ÀàÐÍÊÇarray¡¢objec¡¢stringµÈ³¬¹ý64bitµÄ£¬value´æ´¢µÄ¾ÍÊÇÒ»¸öÖ¸Õ룬ָÏòÕæÊµµÄ´æ´¢½á¹¹µØÖ·¡£

¶ÔÓÚ¼òµ¥µÄ±äÁ¿ÀàÐÍÀ´Ëµ£¬ZvalµÄ´æ´¢±äµÃ·Ç³£¼òµ¥ºÍ¸ßЧ¡£

²»ÐèÒªÒýÓõÄÀàÐÍ£ºNULL¡¢Boolean¡¢Long¡¢Double

ÐèÒªÒýÓõÄÀàÐÍ£ºString¡¢Array¡¢Object¡¢Resource¡¢Reference

3. ÄÚ²¿ÀàÐÍzend_string

Zend_stringÊÇʵ¼Ê´æ´¢×Ö·û´®µÄ½á¹¹Ì壬ʵ¼ÊµÄÄÚÈÝ»á´æ´¢ÔÚval£¨char£¬×Ö·ûÐÍ£©ÖУ¬¶øvalÊÇÒ»¸öcharÊý×飬³¤¶ÈΪ1£¨·½±ã³ÉÔ±±äÁ¿Õ¼Î»£©¡£

½á¹¹Ìå×îºóÒ»¸ö³ÉÔ±±äÁ¿²ÉÓÃcharÊý×飬¶ø²»ÊÇʹÓÃchar*£¬ÕâÀïÓÐÒ»¸öСÓÅ»¯¼¼ÇÉ£¬¿ÉÒÔ½µµÍCPUµÄcache miss¡£

Èç¹ûʹÓÃcharÊý×飬µ±mallocÉêÇëÉÏÊö½á¹¹ÌåÄڴ棬ÊÇÉêÇëÔÚÍ¬Ò»Æ¬ÇøÓòµÄ£¬Í¨³£Êdz¤¶ÈÊÇsizeof(_zend_string) + ʵ¼Êchar´æ´¢¿Õ¼ä¡£µ«ÊÇ£¬Èç¹ûʹÓÃchar*£¬ÄǸöÕâ¸öλÖô洢µÄÖ»ÊÇÒ»¸öÖ¸Õë£¬ÕæÊµµÄ´æ´¢ÓÖÔÚÁíÍâһƬ¶ÀÁ¢µÄÄÚ´æÇøÓòÄÚ¡£

ʹÓÃchar[1>ºÍchar*µÄÄÚ´æ·ÖÅä¶Ô±È£º

´ÓÂß¼­ÊµÏֵĽǶÈÀ´¿´£¬Á½Õ߯äʵҲûÓжà´óÇø±ð£¬Ð§¹ûºÜÀàËÆ¡£¶øÊµ¼ÊÉÏ£¬µ±ÕâЩÄÚ´æ¿é±»ÔØÈëµ½CPUµÄÖУ¬¾ÍÏԵ÷dz£²»Ò»Ñù¡£Ç°ÕßÒòΪÊÇÁ¬Ðø·ÖÅäÔÚÒ»ÆðµÄͬһ¿éÄڴ棬ÔÚCPU¶Áȡʱ£¬Í¨³£¶¼¿ÉÒÔһͬ»ñµÃ£¨ÒòΪ»áÔÚͬһ¼¶»º´æÖУ©¡£¶øºóÕߣ¬ÒòΪÊÇÁ½¿éÄÚ´æµÄÊý¾Ý£¬CPU¶ÁÈ¡µÚÒ»¿éÄÚ´æµÄʱºò£¬ºÜ¿ÉÄܵڶþ¿éÄÚ´æÊý¾Ý²»ÔÚͬһ¼¶»º´æÖУ¬Ê¹CPU²»µÃ²»ÍùL2£¨¶þ¼¶»º´æ£©ÒÔÏÂѰÕÒ£¬ÉõÖÁµ½ÄÚ´æÇøÓò²éµ½ÏëÒªµÄµÚ¶þ¿éÄÚ´æÊý¾Ý¡£ÕâÀï¾Í»áÒýÆðCPU Cache Miss£¬¶øÁ½ÕߵĺÄʱ×î¸ß¿ÉÒÔÏà²î100±¶¡£

ÁíÍ⣬ÔÚ×Ö·û´®¸´ÖƵÄʱºò£¬²ÉÓÃÒýÓø³Öµ£¬zend_string¿ÉÒÔ±ÜÃâµÄÄڴ濽±´¡£

4. PHPÊý×éµÄ±ä»¯£¨HashTableºÍZend Array£©

ÔÚ±àдPHP³ÌÐò¹ý³ÌÖУ¬Ê¹ÓÃ×îÆµ·±µÄÀàÐÍιýÓÚÊý×飬PHP5µÄÊý×é²ÉÓÃHashTableʵÏÖ¡£Èç¹ûÓñȽϴÖÂԵĸÅÀ¨·½Ê½À´Ëµ£¬ËüËãÊÇÒ»¸öÖ§³ÖË«ÏòÁ´±íµÄHashTable£¬²»½öÖ§³Öͨ¹ýÊý×éµÄkeyÀ´×öhashÓ³Éä·ÃÎÊÔªËØ£¬Ò²ÄÜͨ¹ýforeachÒÔ·ÃÎÊË«ÏòÁ´±íµÄ·½Ê½±éÀúÊý×éÔªËØ¡£

PHP5µÄHashTable£¨½ØÍ¼À´×ÔÓÚPPT£©£º

Õâ¸öͼ¿´ÆðÀ´ºÜ¸´ÔÓ£¬¸÷ÖÖÖ¸ÕëÌøÀ´ÌøÈ¥£¬µ±ÎÒÃÇͨ¹ýkeyÖµ·ÃÎÊÒ»¸öÔªËØÄÚÈݵÄʱºò£¬ÓÐʱÐèÒª3´ÎµÄÖ¸ÕëÌøÔ¾²ÅÄÜÕÒ¶ÔÐèÒªµÄÄÚÈÝ¡£¶ø×îÖØÒªµÄÒ»µã£¬¾ÍÔÚÓÚÕâЩÊý×éÔªËØ´æ´¢£¬¶¼ÊÇ·ÖÉ¢ÔÚ¸÷¸ö²»Í¬µÄÄÚ´æÇøÓòµÄ¡£Í¬Àí¿ÉµÃ£¬ÔÚCPU¶ÁÈ¡µÄʱºò£¬ÒòΪËüÃǾͺܿÉÄܲ»ÔÚͬһ¼¶»º´æÖУ¬»áµ¼ÖÂCPU²»µÃ²»µ½Ï¼¶»º´æÉõÖÁÄÚ´æÇøÓò²éÕÒ£¬Ò²¾ÍÊÇÒýÆðCPU»º´æÃüÖÐϽµ£¬½ø¶øÔö¼Ó¸ü¶àµÄºÄʱ¡£

PHP7µÄZend Array£¨½ØÍ¼À´Ô´ÓÚPPT£©£º

а汾µÄÊý×é½á¹¹£¬·Ç³£¼ò½à£¬ÈÃÈËÑÛǰһÁÁ¡£×î´óµÄÌØµãÊÇ£¬Õû¿éµÄÊý×éÔªËØºÍhashÓ³Éä±íÈ«²¿Á¬½ÓÔÚÒ»Æð£¬±»·ÖÅäÔÚͬһ¿éÄÚ´æÄÚ¡£Èç¹ûÊDZéÀúÒ»¸öÕûÐ͵ļòµ¥ÀàÐÍÊý×飬ЧÂÊ»á·Ç³£¿ì£¬ÒòΪ£¬Êý×éÔªËØ£¨Bucket£©±¾ÉíÊÇÁ¬Ðø·ÖÅäÔÚͬһ¿éÄÚ´æÀ²¢ÇÒ£¬Êý×éÔªËØµÄzval»á°ÑÕûÐÍÔªËØ´æ´¢ÔÚÄÚ²¿£¬Ò²²»ÔÙÓÐÖ¸ÕëÍâÁ´£¬È«²¿Êý¾Ý¶¼´æ´¢ÔÚµ±Ç°ÄÚ´æÇøÓòÄÚ¡£µ±È»£¬×îÖØÒªµÄÊÇ£¬ËüÄܹ»±ÜÃâCPU Cache Miss£¨CPU»º´æÃüÖÐÂÊϽµ£©¡£

Zend ArrayµÄ±ä»¯£º

1.Êý×éµÄvalueĬÈÏΪzval¡£

2.HashTableµÄ´óС´Ó72Ͻµµ½56×Ö½Ú£¬¼õÉÙ22%¡£

3.BucketsµÄ´óС´Ó72Ͻµµ½32×Ö½Ú£¬¼õÉÙ50%¡£

4.Êý×éÔªËØµÄBucketsµÄÄÚ´æ¿Õ¼äÊÇһͬ·ÖÅäµÄ¡£

5.Êý×éÔªËØµÄkey£¨Bucket.key£©Ö¸Ïòzend_string¡£

6.Êý×éÔªËØµÄvalue±»Ç¶Èëµ½BucketÖС£

7.½µµÍCPU Cache Miss¡£

5. º¯Êýµ÷ÓûúÖÆ£¨Function Calling Convention£©

PHP7¸Ä½øÁ˺¯ÊýµÄµ÷ÓûúÖÆ£¬Í¨¹ýÓÅ»¯²ÎÊý´«µÝµÄ»·½Ú£¬¼õÉÙÁËһЩָÁÌá¸ßÖ´ÐÐЧÂÊ¡£

PHP5µÄº¯Êýµ÷ÓûúÖÆ£¨½ØÍ¼À´×ÔÓÚPPT£©£º

ͼÖУ¬ÔÚvmÕ»ÖеÄÖ¸Áîsend_valºÍrecv²ÎÊýµÄÖ¸ÁîÊÇÏàͬ£¬PHP7ͨ¹ý¼õÉÙÕâÁ½ÌõÖØ¸´£¬À´´ïµ½¶Ôº¯Êýµ÷ÓûúÖÆµÄµ×²ãÓÅ»¯¡£

PHP7µÄº¯Êýµ÷ÓûúÖÆ£¨½ØÍ¼À´×ÔÓÚPPT£©£º

6. ͨ¹ýºê¶¨ÒåºÍÄÚÁªº¯Êý£¨inline£©£¬ÈñàÒëÆ÷ÌáǰÍê³É²¿·Ö¹¤×÷

CÓïÑԵĺ궨Òå»á±»ÔÚÔ¤´¦Àí½×¶Î£¨±àÒë½×¶Î£©Ö´ÐУ¬Ìáǰ½«²¿·Ö¹¤×÷Íê³É£¬ÎÞÐèÔÚ³ÌÐòÔËÐÐʱ·ÖÅäÄڴ棬Äܹ»ÊµÏÖÀàËÆº¯ÊýµÄ¹¦ÄÜ£¬È´Ã»Óк¯Êýµ÷ÓõÄѹջ¡¢µ¯Õ»¿ªÏú£¬Ð§ÂÊ»á±È½Ï¸ß¡£ÄÚÁªº¯ÊýÒ²ÀàËÆ£¬ÔÚÔ¤´¦Àí½×¶Î£¬½«³ÌÐòÖеĺ¯ÊýÌæ»»Îªº¯ÊýÌå£¬ÕæÊµÔËÐеijÌÐòÖ´Ðе½ÕâÀ¾Í²»»á²úÉúº¯Êýµ÷ÓõĿªÏú¡£

PHP7ÔÚÕâ·½Ãæ×öÁ˲»ÉÙµÄÓÅ»¯£¬½«²»ÉÙÐèÒªÔÚÔËÐн׶ÎÒªÖ´ÐеŤ×÷£¬·Åµ½Á˱àÒë½×¶Î¡£ÀýÈç²ÎÊýÀàÐ͵ÄÅжϣ¨Parameters Parsing£©£¬ÒòΪÕâÀïÉæ¼°µÄ¶¼Êǹ̶¨µÄ×Ö·û³£Á¿£¬Òò´Ë£¬¿ÉÒԷŵ½µ½±àÒë½×¶ÎÀ´Íê³É£¬½ø¶øÌáÉýºóÐøµÄÖ´ÐÐЧÂÊ¡£

ÀýÈçÏÂͼÖд¦Àí´«µÝ²ÎÊýÀàÐ͵ķ½Ê½£¬´Ó×ó±ßµÄд·¨£¬ÓÅ»¯ÎªÓұߺêµÄд·¨¡£

Èý¡¢Ð¡½á

Äñ¸çµÄPPTÀï·Å³ö¹ýÒ»×é¶Ô±ÈÊý¾Ý£¬¾ÍÊÇWordPressÔÚPHP5.6Ö´ÐÐ100´Î»á²úÉú70ÒڴεÄCPUÖ¸ÁîÖ´ÐÐÊýÄ¿£¬¶øÔÚPHP7ÖÐÖ»ÐèÒª25ÒڴΣ¬¼õÉÙ64.2%£¬ÕâÊÇÒ»¸öÁîÈËÕ𺳵ÄÊý¾Ý¡£

ÔÚÄñ¸çµÄÕû¸ö·ÖÏíÖУ¬¸øÎÒ×îÉî¿ÌµÄÒ»¸ö¹ÛµãÊÇ£ºÒª×¢Òâϸ½Ú£¬ºÜ¶à¸öϸСµÄÓÅ»¯£¬Ò»µãµã³ÖÐøµØ»ýÀÛ£¬»ýÉٳɶ࣬×îÖÕ»ã¾ÛΪ¾ªÑ޵ijɹû¡£ÎªÉ½¾ÅØð£¬ÆñÒ»ÈÕÖ®¹¦£¬ÎÒÏë´ó¸ÅÒ²ÊÇÕâ¸öµÀÀí¡£

ºÁÎÞÒÉÎÊ£¬PHP7ÔÚÐÔÄÜ·½ÃæÊµÏÖ¿çԽʽµÄÌáÉý£¬Èç¹ûÄܹ»½«ÕâЩ³É¹ûÓ¦ÓÃÔÚPHPµÄWebϵͳÖУ¬Ò²ÐíÎÒÃÇÖ»ÐèÒª¸üÉٵĻúÆ÷£¬¾Í¿ÉÒÔÖ§³ÅÆð¸ü¸ßÇëÇóÁ¿µÄ·þÎñ¡£PHP7Õýʽ°æµÄ·¢²¼£¬ÁîÈ˳äÂúÎÞÏÞã¿ã½¡£

   
3067 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕ Ïà¹ØÎĵµ Ïà¹Ø¿Î³Ì



Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

AndroidÊÖ»ú¿ª·¢£¨Ò»£©
Àí½âJavascript
·ÇµäÐÍajaxʵ¼ù
³¹µ×µÄAjax
javascript ʹÓÃCookies
ʹÓà jQuery ¼ò»¯ Ajax ¿ª·¢

Struts+Spring+Hibernate
»ùÓÚJ2EEµÄWeb 2.0Ó¦Óÿª·¢
J2EEÉè¼ÆÄ£Ê½ºÍÐÔÄܵ÷ÓÅ
Java EE 5ÆóÒµ¼¶¼Ü¹¹Éè¼Æ
Javaµ¥Ôª²âÊÔ·½·¨Óë¼¼Êõ
Java±à³Ì·½·¨Óë¼¼Êõ

ijº½¿Õ¹«Ë¾IT²¿ JavaScriptʵ¼ù
ijµçÊÓÈí¼þ HTML5ºÍJavaScript
Öк½ÐÅ JavaScript¸ß¼¶Ó¦Óÿª·¢
´óÇìÓÍÌï web½çÃæAjax¿ª·¢¼¼Êõ
ºÍÀûʱ ʹÓÃAJAX½øÐÐWEBÓ¦Óÿª·¢