PHP 日本大会 2024

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 条注释

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