1

次の 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 ホスト)で実行すると、1000 に近い数値ではなく、php -f myscript.php35,43,76,543,44,39,29,38 のような出力が得られます...どうすればよいですか?

EDIT:代わりにandtime_nanosleep(0,1000000)を使用してCコードを試してみましたが、同じ結果が得られました。usleep()clock_gettime()

4

1 に答える 1

1

PHP ではオーバーヘッドである可能性がありますが、PHP ではmicrotime()それほどusleep()正確ではない可能性があります。C の同様のコードが何をするかを見るのは興味深いでしょう。

この記事には、正確なタイミングに関する興味深い議論があります。

また、仮想マシンでのタイミングに関する VMWare によるこの記事は興味深いかもしれません。

于 2013-09-09T03:36:23.887 に答える