LoginSignup
1
1

More than 5 years have passed since last update.

PECL High resolution timing 高性能な時計

Posted at

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。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1