此函数在运行在 KVM、XEN(openstack、AWS EC2 等)上的虚拟机上尤其必要,用于计时执行时间。
在这些缺少 vDSO 的平台上,使用 time() 或 microtime() 的常见方法会大大增加 CPU/执行时间,因为在运行 `gettimeofday()` 系统调用时,会从用户空间切换到内核空间。
常见模式是
<?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