gpt4 book ai didi

php - PHP hrtime() 的一致性如何?

转载 作者:行者123 更新时间:2023-12-05 03:28:26 25 4
gpt4 key购买 nike

我目前正在我的一个项目中使用 hrtime(),一个聊天系统(仍处于开发阶段)。

在发送的每条消息中,我将 hrtime(true) 值与消息一起存储到数据库中。

因此收件人将根据存储在应用程序本地存储中的最后一条消息 hrtime 请求新消息。例如:select*from messages_table where message_hrtime>$last_hrtime and message_to=$me

直到今天它一直工作正常,然后我注意到新消息hrtime(true) 插入 DB 的值减少,导致无法接收新消息。

Notice the column message_hrtime decreased from id 35

注意列 message_hrtime 在 id 35 上减少

并且根据这篇文章 https://thephp.cc/articles/high-resolution-monotonic-timer , hrtime() 不断增加。

如果 hrtime(true) 是一致的,现在很困惑。

PHP 7.3

最佳答案

在哪里microtime HRTime 提供“以微秒为单位的当前 Unix 时间戳”类,或高分辨率计时,“返回系统的高分辨率时间,从任意时间点开始计算。传递的时间戳是单调的,无法调整。”。

这意味着 HRTime 独立于服务器时间。您不能跨服务器甚至跨服务器重启都依赖于此。我不会在代码执行过程中信任它。使用数据库时间戳或简单地切换为使用 PHP 的 microtime

HRTime 有一个有趣的应用程序作为一个精确的秒表,如 php.net 上所示:https://www.php.net/manual/en/hrtime.example.basic.php

<?php

$c = new HRTime\StopWatch;

$c->start();
/* measure this code block execution */
for ($i = 0; $i < 1024*1024; $i++);
$c->stop();
$elapsed0 = $c->getLastElapsedTime(HRTime\Unit::NANOSECOND);

/* measurement is not running here*/
for ($i = 0; $i < 1024*1024; $i++);

$c->start();
/* measure this code block execution */
for ($i = 0; $i < 1024*1024; $i++);
$c->stop();
$elapsed1 = $c->getLastElapsedTime(HRTime\Unit::NANOSECOND);

$elapsed_total = $c->getElapsedTime(HRTime\Unit::NANOSECOND);

关于php - PHP hrtime() 的一致性如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71271466/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com