html5中文学习网

您的位置: 首页 > 网络编程 > PHP编程 » 正文

提升PHP性能之改变Zend引擎分发方式_PHP教程_编程技术

[ ] 已经帮助:人解决问题

 Y4AHTML5中文学习网 - HTML5先行者学习网

  从PHP5.1开始,PHP提供了用户对Zend VM执行分发方式的选择接口.Y4AHTML5中文学习网 - HTML5先行者学习网

  之前的文章中, 我也提过这方面的内容, Zend虚拟机在执行的时候, 对于编译生成的op_array中的每一条opline的opcode都会分发到相应的处理器(zend_vm_def.h定义)执行, 而按照分发的方式不同, 分发过程可以分为CALL, SWITCH, 和GOTO三种类型.Y4AHTML5中文学习网 - HTML5先行者学习网

  默认是CALL方式, 也就是所有的opcode处理器都定义为函数, 然后虚拟机调用. 这种方式是传统的方式, 也一般被认为是最稳定的方式.Y4AHTML5中文学习网 - HTML5先行者学习网

  SWITCH方式和GOTO方式则和其命名的意义相同, 分别通过switch和goto来分发opcode到对应的处理逻辑(段).Y4AHTML5中文学习网 - HTML5先行者学习网

  官方给出的描述是:Y4AHTML5中文学习网 - HTML5先行者学习网

  CALL – Uses function handlers for opcodesY4AHTML5中文学习网 - HTML5先行者学习网

  SWITCH – Uses switch() statement for opcode dispatchY4AHTML5中文学习网 - HTML5先行者学习网

  GOTO – Uses goto for opcode dispatch (threaded opcodes architecture)Y4AHTML5中文学习网 - HTML5先行者学习网

  GOTO is usually (depends on CPU and compiler) faster than SWITCH, whichY4AHTML5中文学习网 - HTML5先行者学习网

  tends to be slightly faster than CALL.Y4AHTML5中文学习网 - HTML5先行者学习网

  CALL is default because it doesn’t take very long to compile as opposedY4AHTML5中文学习网 - HTML5先行者学习网

  to the other two and in general the speed is quite close to the others.Y4AHTML5中文学习网 - HTML5先行者学习网

  那么如果使用GOTO方式, 效率上到底能提高多少呢?Y4AHTML5中文学习网 - HTML5先行者学习网

  今天我就分别使用各种方式来测试一番, 测试脚本bench.php.Y4AHTML5中文学习网 - HTML5先行者学习网

  第一点被证明的就是, 官方说的GOTO方式编译耗时显著高于其他俩种方式, 我一开始在虚拟机上编译, 每次都Hangup(), 最后只好换了个强劲点的物理机, 大约3分钟后, 编译成功..Y4AHTML5中文学习网 - HTML5先行者学习网

  测试环境:Y4AHTML5中文学习网 - HTML5先行者学习网

 Y4AHTML5中文学习网 - HTML5先行者学习网

  PHP 5.3.0 LinuxY4AHTML5中文学习网 - HTML5先行者学习网

  AMD Opteron(tm) Processor 270(2G) X 4 6G MemoryY4AHTML5中文学习网 - HTML5先行者学习网

 Y4AHTML5中文学习网 - HTML5先行者学习网

  编译参数:Y4AHTML5中文学习网 - HTML5先行者学习网

 Y4AHTML5中文学习网 - HTML5先行者学习网

  ./configure --with-zend-vm=CALL/GOTO/SWITCHY4AHTML5中文学习网 - HTML5先行者学习网

 Y4AHTML5中文学习网 - HTML5先行者学习网

  测试结果如下(都是三次取中值):Y4AHTML5中文学习网 - HTML5先行者学习网

  CALL方式:Y4AHTML5中文学习网 - HTML5先行者学习网

 Y4AHTML5中文学习网 - HTML5先行者学习网

  laruence@dev01.tc$ sapi/cli/php bench.phpY4AHTML5中文学习网 - HTML5先行者学习网

  simple 0.358Y4AHTML5中文学习网 - HTML5先行者学习网

  simplecall 0.418Y4AHTML5中文学习网 - HTML5先行者学习网

  simpleucall 0.405Y4AHTML5中文学习网 - HTML5先行者学习网

  simpleudcall 0.424Y4AHTML5中文学习网 - HTML5先行者学习网

  mandel 1.011Y4AHTML5中文学习网 - HTML5先行者学习网

  mandel2 1.238Y4AHTML5中文学习网 - HTML5先行者学习网

  ackermann(7) 0.375Y4AHTML5中文学习网 - HTML5先行者学习网

  ary(50000) 0.083Y4AHTML5中文学习网 - HTML5先行者学习网

  ary2(50000) 0.075Y4AHTML5中文学习网 - HTML5先行者学习网

  ary3(2000) 0.561Y4AHTML5中文学习网 - HTML5先行者学习网

  fibo(30) 1.156Y4AHTML5中文学习网 - HTML5先行者学习网

  hash1(50000) 0.114Y4AHTML5中文学习网 - HTML5先行者学习网

  hash2(500) 0.091Y4AHTML5中文学习网 - HTML5先行者学习网

  heapsort(20000) 0.270Y4AHTML5中文学习网 - HTML5先行者学习网

  matrix(20) 0.276Y4AHTML5中文学习网 - HTML5先行者学习网

  nestedloop(12) 0.599Y4AHTML5中文学习网 - HTML5先行者学习网

  sieve(30) 0.350Y4AHTML5中文学习网 - HTML5先行者学习网

  strcat(200000) 0.039Y4AHTML5中文学习网 - HTML5先行者学习网

  ------------------------Y4AHTML5中文学习网 - HTML5先行者学习网

  Total 7.844Y4AHTML5中文学习网 - HTML5先行者学习网

 Y4AHTML5中文学习网 - HTML5先行者学习网

  SWITCH方式:Y4AHTML5中文学习网 - HTML5先行者学习网

 Y4AHTML5中文学习网 - HTML5先行者学习网

  laruence@dev01.tc$ sapi/cli/php bench.phpY4AHTML5中文学习网 - HTML5先行者学习网

  simple 0.393Y4AHTML5中文学习网 - HTML5先行者学习网

  simplecall 0.414Y4AHTML5中文学习网 - HTML5先行者学习网

  simpleucall 0.424Y4AHTML5中文学习网 - HTML5先行者学习网

  simpleudcall 0.445Y4AHTML5中文学习网 - HTML5先行者学习网

  mandel 1.007Y4AHTML5中文学习网 - HTML5先行者学习网

  mandel2 1.254Y4AHTML5中文学习网 - HTML5先行者学习网

  ackermann(7) 0.392Y4AHTML5中文学习网 - HTML5先行者学习网

  ary(50000) 0.084Y4AHTML5中文学习网 - HTML5先行者学习网

  ary2(50000) 0.073Y4AHTML5中文学习网 - HTML5先行者学习网

  ary3(2000) 0.593Y4AHTML5中文学习网 - HTML5先行者学习网

  fibo(30) 1.185Y4AHTML5中文学习网 - HTML5先行者学习网

  hash1(50000) 0.120Y4AHTML5中文学习网 - HTML5先行者学习网

  hash2(500) 0.092Y4AHTML5中文学习网 - HTML5先行者学习网

  heapsort(20000) 0.285Y4AHTML5中文学习网 - HTML5先行者学习网

  matrix(20) 0.295Y4AHTML5中文学习网 - HTML5先行者学习网

  nestedloop(12) 0.678Y4AHTML5中文学习网 - HTML5先行者学习网

  sieve(30) 0.359Y4AHTML5中文学习网 - HTML5先行者学习网

  strcat(200000) 0.042Y4AHTML5中文学习网 - HTML5先行者学习网

  ------------------------Y4AHTML5中文学习网 - HTML5先行者学习网

  Total 8.138Y4AHTML5中文学习网 - HTML5先行者学习网

 Y4AHTML5中文学习网 - HTML5先行者学习网

  GOTO方式 :Y4AHTML5中文学习网 - HTML5先行者学习网

 Y4AHTML5中文学习网 - HTML5先行者学习网

  laruence@dev01.tc$ sapi/cli/php bench.phpY4AHTML5中文学习网 - HTML5先行者学习网

  simple 0.306Y4AHTML5中文学习网 - HTML5先行者学习网

  simplecall 0.373Y4AHTML5中文学习网 - HTML5先行者学习网

  simpleucall 0.369Y4AHTML5中文学习网 - HTML5先行者学习网

  simpleudcall 0.385Y4AHTML5中文学习网 - HTML5先行者学习网

  mandel 0.879Y4AHTML5中文学习网 - HTML5先行者学习网

  mandel2 1.132Y4AHTML5中文学习网 - HTML5先行者学习网

  ackermann(7) 0.356Y4AHTML5中文学习网 - HTML5先行者学习网

  ary(50000) 0.081Y4AHTML5中文学习网 - HTML5先行者学习网

  ary2(50000) 0.073Y4AHTML5中文学习网 - HTML5先行者学习网

  ary3(2000) 0.525Y4AHTML5中文学习网 - HTML5先行者学习网

  fibo(30) 1.043Y4AHTML5中文学习网 - HTML5先行者学习网

  hash1(50000) 0.111Y4AHTML5中文学习网 - HTML5先行者学习网

  hash2(500) 0.088Y4AHTML5中文学习网 - HTML5先行者学习网

  heapsort(20000) 0.247Y4AHTML5中文学习网 - HTML5先行者学习网

  matrix(20) 0.247Y4AHTML5中文学习网 - HTML5先行者学习网

  nestedloop(12) 0.519Y4AHTML5中文学习网 - HTML5先行者学习网

  sieve(30) 0.331Y4AHTML5中文学习网 - HTML5先行者学习网

  strcat(200000) 0.037Y4AHTML5中文学习网 - HTML5先行者学习网

  ------------------------Y4AHTML5中文学习网 - HTML5先行者学习网

  Total 7.103Y4AHTML5中文学习网 - HTML5先行者学习网

 Y4AHTML5中文学习网 - HTML5先行者学习网

  可见, GOTO方式最快, SWITCH方式最慢.和官方的描述稍有不符.Y4AHTML5中文学习网 - HTML5先行者学习网

  GOTO方式比其默认的CALL方式, 性能提升还是比较明显的.Y4AHTML5中文学习网 - HTML5先行者学习网

  所以, 如果你希望让PHP发挥到机制, 改变Zend VM的分发方式, 也可以做为一个考虑因素.Y4AHTML5中文学习网 - HTML5先行者学习网

  附:Y4AHTML5中文学习网 - HTML5先行者学习网

  使用GOTO方式的configure选项:Y4AHTML5中文学习网 - HTML5先行者学习网

 Y4AHTML5中文学习网 - HTML5先行者学习网

  --with-zend-vm=GOTOY4AHTML5中文学习网 - HTML5先行者学习网

 Y4AHTML5中文学习网 - HTML5先行者学习网

  也可以在Zend目录下使用:Y4AHTML5中文学习网 - HTML5先行者学习网

 Y4AHTML5中文学习网 - HTML5先行者学习网

  php zend_vm_gen.php --with-vm-kind=[CALLGOTOSWITH]Y4AHTML5中文学习网 - HTML5先行者学习网

 Y4AHTML5中文学习网 - HTML5先行者学习网

  测试脚本bench.phpY4AHTML5中文学习网 - HTML5先行者学习网

 Y4AHTML5中文学习网 - HTML5先行者学习网

  Y4AHTML5中文学习网 - HTML5先行者学习网

  /**Y4AHTML5中文学习网 - HTML5先行者学习网

  * PHP Perf Bench Test ScriptY4AHTML5中文学习网 - HTML5先行者学习网

  */Y4AHTML5中文学习网 - HTML5先行者学习网

  function simple() {Y4AHTML5中文学习网 - HTML5先行者学习网

  $a = 0;Y4AHTML5中文学习网 - HTML5先行者学习网

  for ($i = 0; $i < 1000000; $i++)Y4AHTML5中文学习网 - HTML5先行者学习网

  $a++;Y4AHTML5中文学习网 - HTML5先行者学习网

  $thisisanotherlongname = 0;Y4AHTML5中文学习网 - HTML5先行者学习网

  for ($thisisalongname = 0; $thisisalongname < 1000000; $thisisalongname++)Y4AHTML5中文学习网 - HTML5先行者学习网

  $thisisanotherlongname++;Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  /****/Y4AHTML5中文学习网 - HTML5先行者学习网

  function simplecall() {Y4AHTML5中文学习网 - HTML5先行者学习网

  for ($i = 0; $i < 1000000; $i++)Y4AHTML5中文学习网 - HTML5先行者学习网

  strlen("hallo");Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  /****/Y4AHTML5中文学习网 - HTML5先行者学习网

  function hallo($a) {Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  function simpleucall() {Y4AHTML5中文学习网 - HTML5先行者学习网

  for ($i = 0; $i < 1000000; $i++)Y4AHTML5中文学习网 - HTML5先行者学习网

  hallo("hallo");Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  /****/Y4AHTML5中文学习网 - HTML5先行者学习网

  function simpleudcall() {Y4AHTML5中文学习网 - HTML5先行者学习网

  for ($i = 0; $i < 1000000; $i++)Y4AHTML5中文学习网 - HTML5先行者学习网

  hallo2("hallo");Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  function hallo2($a) {Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  /****/Y4AHTML5中文学习网 - HTML5先行者学习网

  function mandel() {Y4AHTML5中文学习网 - HTML5先行者学习网

  $w1=50;Y4AHTML5中文学习网 - HTML5先行者学习网

  $h1=150;Y4AHTML5中文学习网 - HTML5先行者学习网

  $recen=-.45;Y4AHTML5中文学习网 - HTML5先行者学习网

  $imcen=0.0;Y4AHTML5中文学习网 - HTML5先行者学习网

  $r=0.7;Y4AHTML5中文学习网 - HTML5先行者学习网

  $s=0; $rec=0; $imc=0; $re=0; $im=0; $re2=0; $im2=0;Y4AHTML5中文学习网 - HTML5先行者学习网

  $x=0; $y=0; $w2=0; $h2=0; $color=0;Y4AHTML5中文学习网 - HTML5先行者学习网

  $s=2*$r/$w1;Y4AHTML5中文学习网 - HTML5先行者学习网

  $w2=40;Y4AHTML5中文学习网 - HTML5先行者学习网

  $h2=12;Y4AHTML5中文学习网 - HTML5先行者学习网

  for ($y=0 ; $y<=$w1; $y=$y+1) {Y4AHTML5中文学习网 - HTML5先行者学习网

  $imc=$s*($y-$h2)+$imcen;Y4AHTML5中文学习网 - HTML5先行者学习网

  for ($x=0 ; $x<=$h1; $x=$x+1) {Y4AHTML5中文学习网 - HTML5先行者学习网

  $rec=$s*($x-$w2)+$recen;Y4AHTML5中文学习网 - HTML5先行者学习网

  $re=$rec;Y4AHTML5中文学习网 - HTML5先行者学习网

  $im=$imc;Y4AHTML5中文学习网 - HTML5先行者学习网

  $color=1000;Y4AHTML5中文学习网 - HTML5先行者学习网

  $re2=$re*$re;Y4AHTML5中文学习网 - HTML5先行者学习网

  $im2=$im*$im;Y4AHTML5中文学习网 - HTML5先行者学习网

  while( ((($re2+$im2)<1000000) && $color>0)) {Y4AHTML5中文学习网 - HTML5先行者学习网

  $im=$re*$im*2+$imc;Y4AHTML5中文学习网 - HTML5先行者学习网

  $re=$re2-$im2+$rec;Y4AHTML5中文学习网 - HTML5先行者学习网

  $re2=$re*$re;Y4AHTML5中文学习网 - HTML5先行者学习网

  $im2=$im*$im;Y4AHTML5中文学习网 - HTML5先行者学习网

  $color=$color-1;Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  if ( $color==0 ) {Y4AHTML5中文学习网 - HTML5先行者学习网

  print "_";Y4AHTML5中文学习网 - HTML5先行者学习网

  } else {Y4AHTML5中文学习网 - HTML5先行者学习网

  print "#";Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  print "
";Y4AHTML5中文学习网 - HTML5先行者学习网

  flush();Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  /****/Y4AHTML5中文学习网 - HTML5先行者学习网

  function mandel2() {Y4AHTML5中文学习网 - HTML5先行者学习网

  $b = " .:,;!/>)&IH%*#";Y4AHTML5中文学习网 - HTML5先行者学习网

  //float r, i, z, Z, t, c, C;Y4AHTML5中文学习网 - HTML5先行者学习网

  for ($y=30; printf("/n"), $C = $y*0.1 - 1.5, $y--;){Y4AHTML5中文学习网 - HTML5先行者学习网

  for ($x=0; $c = $x*0.04 - 2, $z=0, $Z=0, $x++ < 75;){Y4AHTML5中文学习网 - HTML5先行者学习网

  for ($r=$c, $i=$C, $k=0; $t = $z*$z - $Z*$Z + $r, $Z = 2*$z*$Z + $i, $z=$t, $k<5000; $k++)Y4AHTML5中文学习网 - HTML5先行者学习网

  if ($z*$z + $Z*$Z > 500000) break;Y4AHTML5中文学习网 - HTML5先行者学习网

  echo $b[$k%16];Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  /****/Y4AHTML5中文学习网 - HTML5先行者学习网

  function Ack($m, $n){Y4AHTML5中文学习网 - HTML5先行者学习网

  if($m == 0) return $n+1;Y4AHTML5中文学习网 - HTML5先行者学习网

  if($n == 0) return Ack($m-1, 1);Y4AHTML5中文学习网 - HTML5先行者学习网

  return Ack($m - 1, Ack($m, ($n - 1)));Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  function ackermann($n) {Y4AHTML5中文学习网 - HTML5先行者学习网

  $r = Ack(3,$n);Y4AHTML5中文学习网 - HTML5先行者学习网

  print "Ack(3,$n): $r/n";Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  /****/Y4AHTML5中文学习网 - HTML5先行者学习网

  function ary($n) {Y4AHTML5中文学习网 - HTML5先行者学习网

  for ($i=0; $i<$n; $i++) {Y4AHTML5中文学习网 - HTML5先行者学习网

  $X[$i] = $i;Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  for ($i=$n-1; $i>=0; $i--) {Y4AHTML5中文学习网 - HTML5先行者学习网

  $Y[$i] = $X[$i];Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  $last = $n-1;Y4AHTML5中文学习网 - HTML5先行者学习网

  print "$Y[$last]/n";Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  /****/Y4AHTML5中文学习网 - HTML5先行者学习网

  function ary2($n) {Y4AHTML5中文学习网 - HTML5先行者学习网

  for ($i=0; $i<$n;) {Y4AHTML5中文学习网 - HTML5先行者学习网

  $X[$i] = $i; ++$i;Y4AHTML5中文学习网 - HTML5先行者学习网

  $X[$i] = $i; ++$i;Y4AHTML5中文学习网 - HTML5先行者学习网

  $X[$i] = $i; ++$i;Y4AHTML5中文学习网 - HTML5先行者学习网

  $X[$i] = $i; ++$i;Y4AHTML5中文学习网 - HTML5先行者学习网

  $X[$i] = $i; ++$i;Y4AHTML5中文学习网 - HTML5先行者学习网

  $X[$i] = $i; ++$i;Y4AHTML5中文学习网 - HTML5先行者学习网

  $X[$i] = $i; ++$i;Y4AHTML5中文学习网 - HTML5先行者学习网

  $X[$i] = $i; ++$i;Y4AHTML5中文学习网 - HTML5先行者学习网

  $X[$i] = $i; ++$i;Y4AHTML5中文学习网 - HTML5先行者学习网

  $X[$i] = $i; ++$i;Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  for ($i=$n-1; $i>=0;) {Y4AHTML5中文学习网 - HTML5先行者学习网

  $Y[$i] = $X[$i]; --$i;Y4AHTML5中文学习网 - HTML5先行者学习网

  $Y[$i] = $X[$i]; --$i;Y4AHTML5中文学习网 - HTML5先行者学习网

  $Y[$i] = $X[$i]; --$i;Y4AHTML5中文学习网 - HTML5先行者学习网

  $Y[$i] = $X[$i]; --$i;Y4AHTML5中文学习网 - HTML5先行者学习网

  $Y[$i] = $X[$i]; --$i;Y4AHTML5中文学习网 - HTML5先行者学习网

  $Y[$i] = $X[$i]; --$i;Y4AHTML5中文学习网 - HTML5先行者学习网

  $Y[$i] = $X[$i]; --$i;Y4AHTML5中文学习网 - HTML5先行者学习网

  $Y[$i] = $X[$i]; --$i;Y4AHTML5中文学习网 - HTML5先行者学习网

  $Y[$i] = $X[$i]; --$i;Y4AHTML5中文学习网 - HTML5先行者学习网

  $Y[$i] = $X[$i]; --$i;Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  $last = $n-1;Y4AHTML5中文学习网 - HTML5先行者学习网

  print "$Y[$last]/n";Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  /****/Y4AHTML5中文学习网 - HTML5先行者学习网

  function ary3($n) {Y4AHTML5中文学习网 - HTML5先行者学习网

  for ($i=0; $i<$n; $i++) {Y4AHTML5中文学习网 - HTML5先行者学习网

  $X[$i] = $i + 1;Y4AHTML5中文学习网 - HTML5先行者学习网

  $Y[$i] = 0;Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  for ($k=0; $k<1000; $k++) {Y4AHTML5中文学习网 - HTML5先行者学习网

  for ($i=$n-1; $i>=0; $i--) {Y4AHTML5中文学习网 - HTML5先行者学习网

  $Y[$i] += $X[$i];Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  $last = $n-1;Y4AHTML5中文学习网 - HTML5先行者学习网

  print "$Y[0] $Y[$last]/n";Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  /****/Y4AHTML5中文学习网 - HTML5先行者学习网

  function fibo_r($n){Y4AHTML5中文学习网 - HTML5先行者学习网

  return(($n < 2) ? 1 : fibo_r($n - 2) + fibo_r($n - 1));Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  function fibo($n) {Y4AHTML5中文学习网 - HTML5先行者学习网

  $r = fibo_r($n);Y4AHTML5中文学习网 - HTML5先行者学习网

  print "$r/n";Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  /****/Y4AHTML5中文学习网 - HTML5先行者学习网

  function hash1($n) {Y4AHTML5中文学习网 - HTML5先行者学习网

  for ($i = 1; $i <= $n; $i++) {Y4AHTML5中文学习网 - HTML5先行者学习网

  $X[dechex($i)] = $i;Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  $c = 0;Y4AHTML5中文学习网 - HTML5先行者学习网

  for ($i = $n; $i > 0; $i--) {Y4AHTML5中文学习网 - HTML5先行者学习网

  if ($X[dechex($i)]) { $c++; }Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  print "$c/n";Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  /****/Y4AHTML5中文学习网 - HTML5先行者学习网

  function hash2($n) {Y4AHTML5中文学习网 - HTML5先行者学习网

  for ($i = 0; $i < $n; $i++) {Y4AHTML5中文学习网 - HTML5先行者学习网

  $hash1["foo_$i"] = $i;Y4AHTML5中文学习网 - HTML5先行者学习网

  $hash2["foo_$i"] = 0;Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  for ($i = $n; $i > 0; $i--) {Y4AHTML5中文学习网 - HTML5先行者学习网

  foreach($hash1 as $key => $value) $hash2[$key] += $value;Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  $first = "foo_0";Y4AHTML5中文学习网 - HTML5先行者学习网

  $last = "foo_".($n-1);Y4AHTML5中文学习网 - HTML5先行者学习网

  print "$hash1[$first] $hash1[$last] $hash2[$first] $hash2[$last]/n";Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  /****/Y4AHTML5中文学习网 - HTML5先行者学习网

  function gen_random ($n) {Y4AHTML5中文学习网 - HTML5先行者学习网

  global $LAST;Y4AHTML5中文学习网 - HTML5先行者学习网

  return( ($n * ($LAST = ($LAST * IA + IC) % IM)) / IM );Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  function heapsort_r($n, &$ra) {Y4AHTML5中文学习网 - HTML5先行者学习网

  $l = ($n >> 1) + 1;Y4AHTML5中文学习网 - HTML5先行者学习网

  $ir = $n;Y4AHTML5中文学习网 - HTML5先行者学习网

  while (1) {Y4AHTML5中文学习网 - HTML5先行者学习网

  if ($l > 1) {Y4AHTML5中文学习网 - HTML5先行者学习网

  $rra = $ra[--$l];Y4AHTML5中文学习网 - HTML5先行者学习网

  } else {Y4AHTML5中文学习网 - HTML5先行者学习网

  $rra = $ra[$ir];Y4AHTML5中文学习网 - HTML5先行者学习网

  $ra[$ir] = $ra[1];Y4AHTML5中文学习网 - HTML5先行者学习网

  if (--$ir == 1) {Y4AHTML5中文学习网 - HTML5先行者学习网

  $ra[1] = $rra;Y4AHTML5中文学习网 - HTML5先行者学习网

  return;Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  $i = $l;Y4AHTML5中文学习网 - HTML5先行者学习网

  $j = $l << 1;Y4AHTML5中文学习网 - HTML5先行者学习网

  while ($j <= $ir) {Y4AHTML5中文学习网 - HTML5先行者学习网

  if (($j < $ir) && ($ra[$j] < $ra[$j+1])) {Y4AHTML5中文学习网 - HTML5先行者学习网

  $j++;Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  if ($rra < $ra[$j]) {Y4AHTML5中文学习网 - HTML5先行者学习网

  $ra[$i] = $ra[$j];Y4AHTML5中文学习网 - HTML5先行者学习网

  $j += ($i = $j);Y4AHTML5中文学习网 - HTML5先行者学习网

  } else {Y4AHTML5中文学习网 - HTML5先行者学习网

  $j = $ir + 1;Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  $ra[$i] = $rra;Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  function heapsort($N) {Y4AHTML5中文学习网 - HTML5先行者学习网

  global $LAST;Y4AHTML5中文学习网 - HTML5先行者学习网

  define("IM", 139968);Y4AHTML5中文学习网 - HTML5先行者学习网

  define("IA", 3877);Y4AHTML5中文学习网 - HTML5先行者学习网

  define("IC", 29573);Y4AHTML5中文学习网 - HTML5先行者学习网

  $LAST = 42;Y4AHTML5中文学习网 - HTML5先行者学习网

  for ($i=1; $i<=$N; $i++) {Y4AHTML5中文学习网 - HTML5先行者学习网

  $ary[$i] = gen_random(1);Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  heapsort_r($N, $ary);Y4AHTML5中文学习网 - HTML5先行者学习网

  printf("%.10f/n", $ary[$N]);Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  /****/Y4AHTML5中文学习网 - HTML5先行者学习网

  function mkmatrix ($rows, $cols) {Y4AHTML5中文学习网 - HTML5先行者学习网

  $count = 1;Y4AHTML5中文学习网 - HTML5先行者学习网

  $mx = array();Y4AHTML5中文学习网 - HTML5先行者学习网

  for ($i=0; $i<$rows; $i++) {Y4AHTML5中文学习网 - HTML5先行者学习网

  for ($j=0; $j<$cols; $j++) {Y4AHTML5中文学习网 - HTML5先行者学习网

  $mx[$i][$j] = $count++;Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  return($mx);Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  function mmult ($rows, $cols, $m1, $m2) {Y4AHTML5中文学习网 - HTML5先行者学习网

  $m3 = array();Y4AHTML5中文学习网 - HTML5先行者学习网

  for ($i=0; $i<$rows; $i++) {Y4AHTML5中文学习网 - HTML5先行者学习网

  for ($j=0; $j<$cols; $j++) {Y4AHTML5中文学习网 - HTML5先行者学习网

  $x = 0;Y4AHTML5中文学习网 - HTML5先行者学习网

  for ($k=0; $k<$cols; $k++) {Y4AHTML5中文学习网 - HTML5先行者学习网

  $x += $m1[$i][$k] * $m2[$k][$j];Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  $m3[$i][$j] = $x;Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  return($m3);Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  function matrix($n) {Y4AHTML5中文学习网 - HTML5先行者学习网

  $SIZE = 30;Y4AHTML5中文学习网 - HTML5先行者学习网

  $m1 = mkmatrix($SIZE, $SIZE);Y4AHTML5中文学习网 - HTML5先行者学习网

  $m2 = mkmatrix($SIZE, $SIZE);Y4AHTML5中文学习网 - HTML5先行者学习网

  while ($n--) {Y4AHTML5中文学习网 - HTML5先行者学习网

  $mm = mmult($SIZE, $SIZE, $m1, $m2);Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  print "{$mm[0][0]} {$mm[2][3]} {$mm[3][2]} {$mm[4][4]}/n";Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  /****/Y4AHTML5中文学习网 - HTML5先行者学习网

  function nestedloop($n) {Y4AHTML5中文学习网 - HTML5先行者学习网

  $x = 0;Y4AHTML5中文学习网 - HTML5先行者学习网

  for ($a=0; $a<$n; $a++)Y4AHTML5中文学习网 - HTML5先行者学习网

  for ($b=0; $b<$n; $b++)Y4AHTML5中文学习网 - HTML5先行者学习网

  for ($c=0; $c<$n; $c++)Y4AHTML5中文学习网 - HTML5先行者学习网

  for ($d=0; $d<$n; $d++)Y4AHTML5中文学习网 - HTML5先行者学习网

  for ($e=0; $e<$n; $e++)Y4AHTML5中文学习网 - HTML5先行者学习网

  for ($f=0; $f<$n; $f++)Y4AHTML5中文学习网 - HTML5先行者学习网

  $x++;Y4AHTML5中文学习网 - HTML5先行者学习网

  print "$x/n";Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  /****/Y4AHTML5中文学习网 - HTML5先行者学习网

  function sieve($n) {Y4AHTML5中文学习网 - HTML5先行者学习网

  $count = 0;Y4AHTML5中文学习网 - HTML5先行者学习网

  while ($n-- > 0) {Y4AHTML5中文学习网 - HTML5先行者学习网

  $count = 0;Y4AHTML5中文学习网 - HTML5先行者学习网

  $flags = range (0,8192);Y4AHTML5中文学习网 - HTML5先行者学习网

  for ($i=2; $i<8193; $i++) {Y4AHTML5中文学习网 - HTML5先行者学习网

  if ($flags[$i] > 0) {Y4AHTML5中文学习网 - HTML5先行者学习网

  for ($k=$i+$i; $k <= 8192; $k+=$i) {Y4AHTML5中文学习网 - HTML5先行者学习网

  $flags[$k] = 0;Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  $count++;Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  print "Count: $count/n";Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  /****/Y4AHTML5中文学习网 - HTML5先行者学习网

  function strcat($n) {Y4AHTML5中文学习网 - HTML5先行者学习网

  $str = "";Y4AHTML5中文学习网 - HTML5先行者学习网

  while ($n-- > 0) {Y4AHTML5中文学习网 - HTML5先行者学习网

  $str .= "hello/n";Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  $len = strlen($str);Y4AHTML5中文学习网 - HTML5先行者学习网

  print "$len/n";Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  /*****/Y4AHTML5中文学习网 - HTML5先行者学习网

  function getmicrotime()Y4AHTML5中文学习网 - HTML5先行者学习网

  {Y4AHTML5中文学习网 - HTML5先行者学习网

  $t = gettimeofday();Y4AHTML5中文学习网 - HTML5先行者学习网

  return ($t['sec'] + $t['usec'] / 1000000);Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  function start_test()Y4AHTML5中文学习网 - HTML5先行者学习网

  {Y4AHTML5中文学习网 - HTML5先行者学习网

  ob_start();Y4AHTML5中文学习网 - HTML5先行者学习网

  return getmicrotime();Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  function end_test($start, $name)Y4AHTML5中文学习网 - HTML5先行者学习网

  {Y4AHTML5中文学习网 - HTML5先行者学习网

  global $total;Y4AHTML5中文学习网 - HTML5先行者学习网

  $end = getmicrotime();Y4AHTML5中文学习网 - HTML5先行者学习网

  ob_end_clean();Y4AHTML5中文学习网 - HTML5先行者学习网

  $total += $end-$start;Y4AHTML5中文学习网 - HTML5先行者学习网

  $num = number_format($end-$start,3);Y4AHTML5中文学习网 - HTML5先行者学习网

  $pad = str_repeat(" ", 24-strlen($name)-strlen($num));Y4AHTML5中文学习网 - HTML5先行者学习网

  echo $name.$pad.$num."/n";Y4AHTML5中文学习网 - HTML5先行者学习网

  ob_start();Y4AHTML5中文学习网 - HTML5先行者学习网

  return getmicrotime();Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  function total()Y4AHTML5中文学习网 - HTML5先行者学习网

  {Y4AHTML5中文学习网 - HTML5先行者学习网

  global $total;Y4AHTML5中文学习网 - HTML5先行者学习网

  $pad = str_repeat("-", 24);Y4AHTML5中文学习网 - HTML5先行者学习网

  echo $pad."/n";Y4AHTML5中文学习网 - HTML5先行者学习网

  $num = number_format($total,3);Y4AHTML5中文学习网 - HTML5先行者学习网

  $pad = str_repeat(" ", 24-strlen("Total")-strlen($num));Y4AHTML5中文学习网 - HTML5先行者学习网

  echo "Total".$pad.$num."/n";Y4AHTML5中文学习网 - HTML5先行者学习网

  }Y4AHTML5中文学习网 - HTML5先行者学习网

  $t0 = $t = start_test();Y4AHTML5中文学习网 - HTML5先行者学习网

  simple();Y4AHTML5中文学习网 - HTML5先行者学习网

  $t = end_test($t, "simple");Y4AHTML5中文学习网 - HTML5先行者学习网

  simplecall();Y4AHTML5中文学习网 - HTML5先行者学习网

  $t = end_test($t, "simplecall");Y4AHTML5中文学习网 - HTML5先行者学习网

  simpleucall();Y4AHTML5中文学习网 - HTML5先行者学习网

  $t = end_test($t, "simpleucall");Y4AHTML5中文学习网 - HTML5先行者学习网

  simpleudcall();Y4AHTML5中文学习网 - HTML5先行者学习网

  $t = end_test($t, "simpleudcall");Y4AHTML5中文学习网 - HTML5先行者学习网

  mandel();Y4AHTML5中文学习网 - HTML5先行者学习网

  $t = end_test($t, "mandel");Y4AHTML5中文学习网 - HTML5先行者学习网

  mandel2();Y4AHTML5中文学习网 - HTML5先行者学习网

  $t = end_test($t, "mandel2");Y4AHTML5中文学习网 - HTML5先行者学习网

  ackermann(7);Y4AHTML5中文学习网 - HTML5先行者学习网

  $t = end_test($t, "ackermann(7)");Y4AHTML5中文学习网 - HTML5先行者学习网

  ary(50000);Y4AHTML5中文学习网 - HTML5先行者学习网

  $t = end_test($t, "ary(50000)");Y4AHTML5中文学习网 - HTML5先行者学习网

  ary2(50000);Y4AHTML5中文学习网 - HTML5先行者学习网

  $t = end_test($t, "ary2(50000)");Y4AHTML5中文学习网 - HTML5先行者学习网

  ary3(2000);Y4AHTML5中文学习网 - HTML5先行者学习网

  $t = end_test($t, "ary3(2000)");Y4AHTML5中文学习网 - HTML5先行者学习网

  fibo(30);Y4AHTML5中文学习网 - HTML5先行者学习网

  $t = end_test($t, "fibo(30)");Y4AHTML5中文学习网 - HTML5先行者学习网

  hash1(50000);Y4AHTML5中文学习网 - HTML5先行者学习网

  $t = end_test($t, "hash1(50000)");Y4AHTML5中文学习网 - HTML5先行者学习网

  hash2(500);Y4AHTML5中文学习网 - HTML5先行者学习网

  $t = end_test($t, "hash2(500)");Y4AHTML5中文学习网 - HTML5先行者学习网

  heapsort(20000);Y4AHTML5中文学习网 - HTML5先行者学习网

  $t = end_test($t, "heapsort(20000)");Y4AHTML5中文学习网 - HTML5先行者学习网

  matrix(20);Y4AHTML5中文学习网 - HTML5先行者学习网

  $t = end_test($t, "matrix(20)");Y4AHTML5中文学习网 - HTML5先行者学习网

  nestedloop(12);Y4AHTML5中文学习网 - HTML5先行者学习网

  $t = end_test($t, "nestedloop(12)");Y4AHTML5中文学习网 - HTML5先行者学习网

  sieve(30);Y4AHTML5中文学习网 - HTML5先行者学习网

  $t = end_test($t, "sieve(30)");Y4AHTML5中文学习网 - HTML5先行者学习网

  strcat(200000);Y4AHTML5中文学习网 - HTML5先行者学习网

  $t = end_test($t, "strcat(200000)");Y4AHTML5中文学习网 - HTML5先行者学习网

  total($t0, "Total");Y4AHTML5中文学习网 - HTML5先行者学习网

  ?>Y4AHTML5中文学习网 - HTML5先行者学习网

Y4AHTML5中文学习网 - HTML5先行者学习网
Y4AHTML5中文学习网 - HTML5先行者学习网
(责任编辑:)
推荐书籍
推荐资讯
关于HTML5先行者 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助