4

我试图做一些 php 5.5 与 HHVM 的基准测试,并且使用 hhvm 获得了一些相当不错的结果。然而,在 HHVM 上冒泡排序的性能非常糟糕。我猜它与数组有关。在下面的示例中,当 q=1000 时,hhvm 几乎比 php 5.5 差 5 倍。因为在这两种情况下,因为测试运行了很多次,所以我不认为热身时间应该是一个问题。在这两种情况下,它们都是 fastcgi 模式。在 q=1000 的情况下,php5.5 需要大约 200 毫秒来提供页面,而 hhvm 大约需要 1000 毫秒。我尝试使用 splfixedclass,但它在 hhvm 上的性能也很差。是否有一个特殊的类或一些特殊的选项可以提高 hhvm 中的数组性能?

我解释了我在这里做了什么:http: //letschat.info/php-5-5-vs-hhvm-vs-node-js-benchmark-part-2/

$starttime = microtime(true);

if($_GET['q']!=""){
 $count = $_GET['q'];
} else {
  $count = 100;

}

function  getRandom(){
        $random = array();
        global $count;

        for($i=0;$i<$count;$i++){
                $random[]=rand(1,100);
        }
        return $random;
}

$array = getRandom();

for($i=0;$i<10;$i++) {
        #$i=0;
        //while ($i<$a) {

        $a = count($array);
        $b=$a-1;

        for($j=0; $j < $a; $j++){
                for ($k=0;$k<$b;$k++) {
                        if ($array[$k+1] < $array[$k]) {
                                $t = $array[$k];
                                $array[$k] = $array[$k+1];
                                $array[$k+1] = $t;
                        }
                }

                //++$i;
        }
        $array[$count/2]=rand(1,100);

}
print_r($array);
echo microtime(true) - $starttime;
4

1 回答 1

10

一个问题和一个可能的问题:

  • 将所有代码放在一个函数中。我们不 JIT 伪电源(主体中的代码)。
  • 在 Web 请求中运行代码,或者如果您正在执行命令行,请使用-v Eval.Jit=true. 我们对脚本禁用 JITting,因为它们通常不会运行很长时间,而且预热成本高于运行时成本。

.

function main() {
  // Do everything
}
main();
于 2013-12-31T17:36:11.407 回答