快速业务通道

提升PHP性能之改变Zend引擎分发方式

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-23

  hash2(500) 0.088

  heapsort(20000) 0.247

  matrix(20) 0.247

  nestedloop(12) 0.519

  sieve(30) 0.331

  strcat(200000) 0.037

  ------------------------

  Total 7.103

 

  可见, GOTO方式最快, SWITCH方式最慢.和官方的描述稍有不符.

  GOTO方式比其默认的CALL方式, 性能提升还是比较明显的.

  所以, 如果你希望让PHP发挥到机制, 改变Zend VM的分发方式, 也可以做为一个考虑因素.

  附:

  使用GOTO方式的configure选项:

 

  --with-zend-vm=GOTO

 

  也可以在Zend目录下使用:

 

  php zend_vm_gen.php --with-vm-kind=[CALL|GOTO|SWITH]

 

  测试脚本bench.php

 

  

  /**

  * PHP Perf Bench Test Script

  */

  function simple() {

  $a = 0;

  for ($i = 0; $i < 1000000; $i++)

  $a++;

  $thisisanotherlongname = 0;

  for ($thisisalongname = 0; $thisisalongname < 1000000; $thisisalongname++)

  $thisisanotherlongname++;

  }

  /****/

  function simplecall() {

  for ($i = 0; $i < 1000000; $i++)

  strlen("hallo");

  }

  /****/

  function hallo($a) {

  }

  function simpleucall() {

  for ($i = 0; $i < 1000000; $i++)

  hallo("hallo");

  }

  /****/

  function simpleudcall() {

  for ($i = 0; $i < 1000000; $i++)

  hallo2("hallo");

  }

  function hallo2($a) {

  }

  /****/

  function mandel() {

  $w1=50;

  $h1=150;

  $recen=-.45;

  $imcen=0.0;

  $r=0.7;

  $s=0; $rec=0; $imc=0; $re=0; $im=0; $re2=0; $im2=0;

  $x=0; $y=0; $w2=0; $h2=0; $color=0;

  $s=2*$r/$w1;

  $w2=40;

  $h2=12;

  for ($y=0 ; $y<=$w1; $y=$y+1) {

  $imc=$s*($y-$h2)+$imcen;

  for ($x=0 ; $x<=$h1; $x=$x+1) {

  $rec=$s*($x-$w2)+$recen;

  $re=$rec;

  $im=$imc;

  $color=1000;

  $re2=$re*$re;

  $im2=$im*$im;

  while( ((($re2+$im2)<1000000) && $color>0)) {

  $im=$re*$im*2+$imc;

  $re=$re2-$im2+$rec;

  $re2=$re*$re;

  $im2=$im*$im;

  $color=$color-1;

  }

  if ( $color==0 ) {

  print "_";

  } else {

  print "#";

  }

  }

  print "
";

  flush();

  }

  }

  /****/

  function mandel2() {

  $b = " .:,;!/>)|&IH%*#";

  //float r, i, z, Z, t, c, C;

  for ($y=30; printf("\n"), $C = $y*0.1 - 1.5, $y--;){

  for ($x=0; $c = $x*0.04 - 2, $z=0, $Z=0, $x++ < 75;){

  for ($r=$c, $i=$C, $k=0; $t = $z*$z - $Z*$Z + $r, $Z = 2*$z*$Z + $i, $z=$t, $k<5000; $k++)

  if ($z*$z + $Z*$Z > 500000) break;

  echo $b[$k%16];

  }

  }

  }

  /****/

  function Ack($m, $n){

  if($m == 0) return $n+1;

  if($n == 0) return Ack($m-1, 1);

  return Ack($m - 1, Ack($m, ($n - 1)));

  }

  function ackermann($n) {

  $r = Ack(3,$n);

  print "Ack(3,$n): $r\n";

  }

  /****/

  fun

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号