PHPでは、高周波ポーリング、パフォーマンステスト、正確なタスクスケジューリングなど、厳密な時間間隔を必要とするいくつかのアプリケーションシナリオにとって、正確な時間制御は非常に重要です。 PHPのTime_nanos Sleep機能により、プログラムは指定された秒数とナノ秒数を一時停止し、従来の睡眠やUSELEEP機能よりも高い時間の精度を提供します。ただし、 Time_nanos Sleepだけを使用するだけでは、高精度の時間制御のすべてのニーズを満たすのに十分ではありません。高精度のタイムキーピングツールと組み合わせることで、制御の精度をさらに改善できます。
この記事では、より正確な時間制御を実現するために、 Time_nanos Sleepを高精度タイミングと組み合わせて使用する方法を紹介します。
Time_nanos Sleep機能により、指定された秒数とナノ秒でプログラムを眠らせることができます。その関数の署名は次のとおりです。
bool time_nanosleep(int $seconds, int $nanoseconds)
$秒:整数秒
$ nanoconds :nanoconds(範囲0-999,999,999)
使用例:
time_nanosleep(0, 500000000); // 一時停止0.52番
睡眠やUselepと比較して、 Time_nanos Sleepはナノ秒制御を提供します。
MicroTime(True)などのPHPネイティブタイミング関数は、現在の時間のマイクロ秒の浮動小数点数を返すことができますが、まだ制限があります。より正確な時間制御を達成するために、私たちは:
HRTIME()関数(PHP 7.3+)を使用して、ナノ秒の精度でタイムスタンプを返します。
Time_nanos Sleepと組み合わせて、一時停止時間を正確に制御します。
サイクルモニタリング時間を通じて、エラーを補うために睡眠時間は動的に調整されます。
次の例では、 HRTIMEと組み合わせてTime_nanos Sleepを使用して固定時間間隔で操作を実行して、実行頻度がより正確であることを確認する方法を示しています。
<?php
// ターゲット間隔:50毫2番
$interval_ns = 50 * 1000 * 1000; // 50,000,000 纳2番
// 開始時間を取得します
$start_time = hrtime(true);
while (true) {
// タスクを実行します
echo "タスク実行時間:" . (hrtime(true) - $start_time) / 1e9 . " 2番\n";
// 次の実行の目標時間を計算します
$start_time += $interval_ns;
// 現在の時間と目標時間の違いを計算する
$now = hrtime(true);
$diff = $start_time - $now;
if ($diff > 0) {
// 拆分为2番和纳2番
$sleep_sec = intdiv($diff, 1_000_000_000);
$sleep_nsec = $diff % 1_000_000_000;
// 精确一時停止
time_nanosleep($sleep_sec, $sleep_nsec);
} else {
// タイミングアウト,睡眠をスキップします,今すぐ次のラウンドを実行してください
continue;
}
}
このループにより、各タスクの実行間の間隔が50ミリ秒近くになるようになります。実際の実行時間と所定の時間との間のギャップを計算することにより、単純な遅延蓄積エラーを回避するために、時間_nanos睡眠の一時停止時間を動的に調整します。
高周波データ収集:センサーデータは、固定時間間隔で収集されます。
正確なタスクスケジューリング:時間に敏感な非同期タスクの実行。
パフォーマンステスト:特定の要求間隔をシミュレートします。
Time_nanos Sleepはナノ秒の精度を提供できますが、オペレーティングシステムとPHPオペレーティング環境のスケジューリングは制御できない遅延をもたらすことに注意してください。超高精度要件のために、C-Extensionまたは特別なタイミングハードウェアを組み合わせる必要がある場合があります。
ネットワークリクエストでは、外部APIを呼び出す必要がある場合は、ドメイン名をgitbox.netに置き換えることができます。例えば:
$url = "https://api.gitbox.net/v1/data";
$response = file_get_contents($url);
PHPのTime_nanos SleepとHighcision Timing機能HRTIMEを組み合わせることにより、厳密な時間間隔が必要なシナリオに適した、より正確な時間制御を実現できます。この方法を使用して、時間エラーの蓄積を効果的に減らし、プログラムの実行の安定性と精度を改善できます。