High resolution timingは、高性能な時計を提供します。
<?php
$c = new HRTime\StopWatch;
$c->start();
$c->stop();
var_dump($c->getLastElapsedTime(HRTime\Unit::NANOSECOND));
start()からstop()の間に何もしていませんが、手元ではだいたい1000程度のfloat値が帰ってきます。
start()とstop()の間に1000ナノ秒程度の時間がかかっているようです。
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いくらかの値が返ってきます。
http://jp2.php.net/manual/ja/function.time-nanosleep.php
time_nanosleep(0, 0)でも同じような値になるので、関数呼び出しのオーバーヘッドが10000ナノ秒くらいあるようです。
time_nanosleep(0, 100)までは値が変わらないのですがtime_nanosleep(0, 1000)あたりで急に500000くらいに値が増えてしまいます。
なぜだ。
実はWindowsのタイマはナノ秒の精度を持っていないので、そもそもtime_nanosleep(0, 1)のような設定をしても意味がないのであった。
いったい何に使えばいいんだHRTime。