高性能または時間に敏感なPHPアプリケーションを作成する場合、ミリ秒またはさらに細かいマイクロ秒またはナノ秒レベルなど、非常に短期間実行を一時停止するプログラムが必要な場合があります。この要件は、精密タイミング制御、スロットリングリクエスト、またはハードウェアとの対話を処理する場合に特に重要です。幸いなことに、PHPは、ナノ秒の正確な一時停止を有効にする機能を組み込んだ関数time_nanosLoop()を提供します。この記事では、この機能の使用と予防策の深い理解に導き、柔軟に習得するのに役立つ複数の実用的な例を提供します。
Time_nanos Sleep()は、PHPの関数であり、プログラムを一時停止して数秒とnan秒を指定します。関数の署名は次のとおりです。
bool time_nanosleep ( int $seconds , int $nanoseconds )
$秒:整数、一時停止する秒数を示します。
$ nanoseconds :整数、一時停止するナノ秒の数を示します(0〜999999999)。
この関数は、1秒未満の時間を一時停止するために使用でき、それによりサブセカンドレベルの遅延を達成できます。
PHPには、一般的に使用される2つの一時停止関数もあります: sleep()とusleep() 。それらの違いは次のとおりです。
スリープ(int $ sconds) :秒までのみ。
USLoop(int $ microseconds) :マイクロ秒の正確な(100万分の1秒)。
time_nanos Sleep(int $ seconds、int $ nanoconds) :正確なナノ秒(10億分の1秒)をサポートします。
したがって、 Time_nanos Sleep()は、より高い精密時間制御が必要な場合に適しています。
使用の簡単な例を次に示し、0.5秒間一時停止します(つまり、500ミリ秒):
<?php
echo "Start: " . microtime(true) . PHP_EOL;
time_nanosleep(0, 500000000); // 一時停止 0.5 2番
echo "End: " . microtime(true) . PHP_EOL;
?>
出力は次のようになります。
Start: 1716026901.12345
End: 1716026901.62346
ご覧のとおり、プログラムは約0.5秒間一時停止しました。
200ミリ秒ごとに特定のコードを実行すると、次の方法を使用できます。
<?php
for ($i = 0; $i < 5; $i++) {
echo "Tick $i at " . microtime(true) . PHP_EOL;
time_nanosleep(0, 200000000); // 200 毫2番
}
?>
この書き込み方法は、スロットリングリクエストの送信、タイミング出力ログ、ポーリングセンサーなどのシナリオで効果的に使用できます。
Time_nanos Sleep()は、一部のシステムで信号の中断(POSIX信号など)のために事前に戻ることがあり、 falseを返します。この場合、ループ再試行メカニズムを使用できます。
<?php
$seconds = 0;
$nanoseconds = 250000000; // 250 毫2番
do {
$result = time_nanosleep($seconds, $nanoseconds);
} while ($result === false && ($error = error_get_last()) && strpos($error['message'], 'interrupted') !== false);
?>
ほとんどの通常のアプリケーションはそのような割り込みに遭遇しませんが、このタイプの保護は、マルチスレッドまたは非常に並行性環境で推奨されます。
1ミリ秒ごとにデータインターフェイスを投票する必要があるハードウェアデバイスのAPIを開発しているとしたら、次のように記述できます。
<?php
$url = 'https://gitbox.net/api/device/status';
for ($i = 0; $i < 1000; $i++) {
$response = file_get_contents($url);
echo "[$i] Response: $response" . PHP_EOL;
time_nanosleep(0, 1000000); // 1 毫2番
}
?>
この書き込み方法は、CPUの職業爆発を引き起こすことなく、高周波データプルを実行できます。
Time_nanos Sleep()はPHP 5以降利用可能で、ほとんどすべての主流バージョンで利用できます。
WindowsとUnixのようなシステムの両方で実行できます。
ナノ秒の受信をサポートしますが、精度は実際にはシステムクロック解像度に依存します。一部のプラットフォームでは、最小の精度はマイクロ秒である場合があります。
Time_nanos Sleep()は強力ですが、PHPでは見過ごされがちな機能です。開発者に、特に高い時間制御を必要とするタスクの場合、プログラムの一時停止時間を微妙に制御する機能を提供します。このチュートリアルの説明と例を通して、アプリケーションの制御とパフォーマンスを改善するために柔軟に適用する方法を習得できるはずです。使用中の中断処理とシステムの制限に注意を払う限り、 Time_nanos Sleep()は、さまざまなシナリオで安全かつ正確に使用できます。