LoginSignup
13
3

More than 5 years have passed since last update.

PHPでナノ秒を計る

Posted at

なんとなくマニュアルを見ていたらPHP7.3.0でhrtimeという関数が増えていました。

むかーしHigh resolution timingというPECLが存在したのですが、それと同じようなものがネイティブで実装されたようです。

この実装は作者のAnatol Belskiさっさと実装してしまってからフォーラムに話を持ち込んで、他に影響を与えるようなものでもないからRFC通さなくてもいいんじゃね、とあっさりマージされました。

マージされたのは2018年に入ってからで、確認したところPHP7.3.0α1から既に存在していました。

しかしα1の新機能を紹介したときにはこんな関数見た覚えがないんだけどなあ?
と思ったらα1のNEWSには書かれておらず、α2のNEWSでα1の変更点に追加されていました。
どういうことだ。

hrtime

使い方

    $a = hrtime(true); // 数値になる
    $b = hrtime(true);
    var_dump($b - $a);

    var_dump(hrtime()); // [秒, ナノ秒]

普通の関数なので普通に使うだけです。

その他

プラットフォームによって時刻の取得方法が異なります。
WindowsであればQueryPerformanceCounter
Linux等であればclock_gettime
iOSであればmach_absolute_time
HP-UXであればgethrtime
AIXであればread_wall_time

各プラットフォームにおける最も高精度な時刻取得方法を採用しているようです。
正直知らないプラットフォームもあるんだけど、PHPって色々対応してるんですね。

感想

非常に高精度な時計や時間計測を必要とする分野には役立つかもしれません。
しかしQueryPerformanceCounterの分解能は100ナノ秒以上なので、ナノ秒単位の超高精細カウントはあまり意味がなかった。

13
3
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
13
3