hrtime

(PHP 7 >= 7.3.0, PHP 8)

hrtime获取系统的高分辨率时间

描述

hrtime(bool $as_number = false): array|int|float|false

返回系统的高分辨率时间,从一个任意时间点开始计数。提供的时间戳是单调的,不能被调整。

参数

as_number

是否应该将高分辨率时间作为 array 还是数字返回。

返回值

如果参数 as_number 为 false,则返回一个包含两个整数的数组,形式为 [秒,纳秒]。否则,纳秒将作为 int (64 位平台) 或 float (32 位平台) 返回。失败时返回 false

示例

示例 #1 hrtime() 的用法

<?php
echo hrtime(true), PHP_EOL;
print_r(hrtime());
?>

上面的示例将输出类似以下内容

10444739687370679
Array
(
    [0] => 10444739
    [1] => 687464812
)

参见

添加备注

用户贡献的备注 1 则备注

SenseiSimple
5 年前
此函数在运行在 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
To Top