High resolution timingは、高性能な時計を提供します。
start()とstop()の間に1000ナノ秒程度の時間がかかっているようです。
http://www.php.net/manual/ja/intro.hrtime.php
> It uses the best possible APIs on different platforms which brings resolution up to nanoseconds.
最も性能の良いAPIを利用して時間を取得しているとのことです。
time_nanosleep(0, 0)でも同じような値になるので、関数呼び出しのオーバーヘッドが10000ナノ秒くらいあるようです。
time_nanosleep(0, 100)までは10000程度のまま値が変わらないのですがtime_nanosleep(0, 1000)あたりで急に500000くらいに値が増えてしまいます。
なぜだ。
実はWindowsのタイマはナノ秒の精度を持っていないので、そもそもtime_nanosleep(0, 1)のような設定をしても意味がないのであった。
いったい何に使えばいいんだHRTime。
<?php $c = new HRTime\StopWatch; $c->start(); $c->stop(); var_dump($c->getLastElapsedTime(HRTime\Unit::NANOSECOND));start()からstop()の間に何もしていませんが、手元のXAMPPではだいたい1000程度のfloat値が帰ってきます。
start()とstop()の間に1000ナノ秒程度の時間がかかっているようです。
http://www.php.net/manual/ja/intro.hrtime.php
> It uses the best possible APIs on different platforms which brings resolution up to nanoseconds.
最も性能の良いAPIを利用して時間を取得しているとのことです。
<?php $c = new HRTime\StopWatch; $c->start(); time_nanosleep(0, 1); $c->stop(); var_dump($c->getLastElapsedTime(HRTime\Unit::NANOSECOND));time_nanosleep()で1ナノ秒スリープしているので、理論上は1ナノ秒だけプラスされるはずなのですが、実際は10000いくらかの値が返ってきます。
time_nanosleep(0, 0)でも同じような値になるので、関数呼び出しのオーバーヘッドが10000ナノ秒くらいあるようです。
time_nanosleep(0, 100)までは10000程度のまま値が変わらないのですがtime_nanosleep(0, 1000)あたりで急に500000くらいに値が増えてしまいます。
なぜだ。
実はWindowsのタイマはナノ秒の精度を持っていないので、そもそもtime_nanosleep(0, 1)のような設定をしても意味がないのであった。
いったい何に使えばいいんだHRTime。
PR