如何有效地使脚本进入睡眠状态,持续准确的毫秒数


how can I effectively put my script to sleep for an accurate amount of miliseconds?

我写了下面的myscript.php:

<?php
$count=0;
$start=microtime(true);
while ((microtime(true)-$start)<1) {
        usleep(1000);
        $count++;
}
echo $count;
?>

当我在 CentOS 2.6.32 x64 内核(Windows 7 主机)上运行 php -f myscript.php 时,我得到的输出不是接近 1000,而是 35,43,76,543,44,39,29,38...我能做什么?

编辑:我还尝试使用usleep()clock_gettime()来代替time_nanosleep(0,1000000)和C代码,结果相同。

这可能是 PHP 中的

开销,也可能是 PHP 中的microtime()usleep()不是那么准确。 看看 C 中的类似代码做了什么会很有趣。

本文对准确计时进行了有趣的讨论。

VMWare 撰写的这篇关于虚拟机中计时的文章可能会引起人们的兴趣。