此函数在运行在 KVM、XEN(openstack、AWS EC2 等)上的虚拟机上计时执行时间时尤其必要。
在这些缺乏 vDSO 的平台上,使用 time() 或 microtime() 的常用方法会由于运行 `gettimeofday()` 系统调用时从用户态到内核态的上下文切换而大幅增加 CPU/执行时间。
常用模式是
<?php
$time = -microtime(true);
sleep(5);
$end = sprintf('%f', $time += microtime(true));
?>
替换为
<?php
$start=hrtime(true);
sleep(5);
$end=hrtime(true);
$eta=$end-$start;
echo $eta/1e+6; //纳秒转换为毫秒
//5000.362419
//或者简单地
$eta=-hrtime(true);
sleep(5);
$eta+=hrtime(true);
echo $eta/1e+6; //纳秒转换为毫秒
//5000.088229
?>
还有一个新的 StopWatch 类 https://php.net/manual/en/class.hrtime-stopwatch.php