PHP Conference Japan 2024

hrtime

(PHP 7 >= 7.3.0, PHP 8)

hrtime取得系統的高解析度時間

說明

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

回傳系統的高解析度時間,從任意時間點開始計算。傳回的時間戳記是單調遞增的,且不可調整。

參數

as_number

高解析度時間是否應以 陣列 或數字形式返回。

回傳值

如果參數 as_number 為 false,則回傳一個 [秒數, 奈秒數] 形式的整數陣列。否則,奈秒數將以 整數 (64 位元平台) 或 浮點數 (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.dev.org.tw/manual/en/class.hrtime-stopwatch.php
To Top