如下代码,php中测试是if分支慢2.9秒,else分支快2.2秒,把if条件在1==1和1!=1变换,这是怎么样的机制造成的呢? $stime=microtime(true); //获取程序开始执行的时间
$j=0;
for($i=0;$i<5000000;$i++){
if(1!=1){
$j++;
}else
$j++;
} $etime=microtime(true);//获取程序执行结束的时间
$total=$etime-$stime; //计算差值
$str_total = var_export($total, TRUE);
if(substr_count($str_total,"E")){
$float_total = floatval(substr($str_total,5));
$total = $float_total/100000;
}
echo "$total".'秒';
$j=0;
for($i=0;$i<5000000;$i++){
if(1!=1){
$j++;
}else
$j++;
} $etime=microtime(true);//获取程序执行结束的时间
$total=$etime-$stime; //计算差值
$str_total = var_export($total, TRUE);
if(substr_count($str_total,"E")){
$float_total = floatval(substr($str_total,5));
$total = $float_total/100000;
}
echo "$total".'秒';
0.55976009368896秒
0.55944108963013秒
0.56911516189575秒
0.5602080821991秒
0.56702303886414秒
else
0.5650839805603秒
0.56633019447327秒
0.56741714477539秒
0.56370115280151秒
0.56349802017212秒
*/
这里的两块代码是一样的,应该执行时间大致是相同的吧
就算是C, 也是if 慢, else快, 答案如上楼。
如果是C,有细微差别,cpu会做分支预测,预测成功会有些许性能提升
可以搜索likely unlikely,linux内核中大量使用这个作性能优化
一般测试的工具方法有哪些?我要去测定各部分的耗时,耗CPU等情况