広く使用されているサーバー側のスクリプト言語として、PHPは豊富な時間処理関数を提供します。この場合、 Time_Nanos Sleep機能を使用してプログラムをナノ秒単位で睡眠にします(実行実行)。これは、高精度遅延制御が必要なシナリオで非常に役立ちます。ただし、多くの開発者は、 Time_nanos Sleepを使用する際に互換性の問題と使用制限を経験する場合があります。この記事では、この機能をより適切に適用できるように、 Time_nanos Sleep機能の詳細なサポート、制限、および予防措置について説明します。
Time_nanos Sleepは、バージョン5.0以降PHPによって導入された関数です。その機能は、指定された秒数とナノ秒の実行をスクリプトに一時停止させることです。関数プロトタイプは次のとおりです。
bool time_nanosleep(int $seconds, int $nanoseconds)
$秒:一時停止した秒数、整数。
$ nanoseconds :ナノ秒数は一時停止し、0〜999,99,999の値範囲があります。
この関数は真実に戻り、睡眠を正常に戻し、 falseが失敗しました(たとえば、入力パラメーターは違法です)。信号によって中断されると、残りの秒とナノ秒を含む配列が返されます。
PHPにはこの機能が組み込まれていますが、基礎となるオペレーティングシステムが使用するNanos Sleepシステムコールに依存しています。オペレーティングシステムがナノスリープをサポートしていない場合、PHP機能は適切に機能しません。
Unix/Linuxシステム:ほとんどの最新のLinuxおよびUnixシステムは、 Nanos Sleepをサポートするため、PHPのTime_nanos Sleep機能は一般的に正常に機能します。
Windowsシステム:Windowsプラットフォームは、POSIX Nanos Sleep System Callをサポートしていません。 PHPはまだWindowsでこの機能を持っていますが、その動作は信頼できないか無効である可能性があり、その特定のパフォーマンスはPHPバージョンとWindows APIの実装に依存します。
したがって、クロスプラットフォームを適用するときは、現在の環境がTime_nanos Sleepをサポートしているかどうかを確認することに注意する必要があります。
次の例は、1秒および500ミリ秒(つまり、1.5秒)で一時停止する方法を示しています。
<?php
$seconds = 1;
$nanoseconds = 500000000; // 500 million nanoseconds = 0.5 seconds
$result = time_nanosleep($seconds, $nanoseconds);
if ($result === true) {
echo "成功した睡眠1.52番\n";
} elseif (is_array($result)) {
echo "信号によって中断された睡眠,残り時間:{$result['seconds']}2番,{$result['nanoseconds']}纳2番\n";
} else {
echo "眠れなかった\n";
}
?>
パラメーター範囲を入力します
2番目のパラメーターは、非陰性整数でなければなりません。
ナノ秒パラメーターは0〜999,999,999,999である必要があります。これにより、関数が失敗します。
信号割り込み処理
Time_nanos Sleepは、システム信号によって中断され、残りの睡眠時間を含む配列を返すことができます。開発者は、残りの時間に基づいて睡眠を継続するかどうかを決定できます。
精度の問題<br> ナノ秒ではタイミングがありますが、実際の睡眠の精度はオペレーティングシステムのスケジューリングとハードウェアに依存し、厳密なナノ秒精度を達成できない場合があります。絶対に正確なリアルタイムコントロールではなく、マイクロ秒からミリ秒までの遅延が必要なシナリオに適しています。
クロスプラットフォームの互換性<br> Windowsプラットフォームのサポートが不完全であるため、 function_exists( 'time_nanosleep')やPHPのPHP_OS定数を介してオペレーティングシステムを判断するなど、コードで環境検出を実行することをお勧めします。
代替案
Windowsプラットフォームは、 USLoopまたはTime_Sleep_untilの使用を検討できますが、精度はTime_nanos Sleepほど良くありませんが、互換性は優れています。
より高い精度のタイミング要件の場合、拡張ライブラリを組み合わせるか、システム固有のAPIを呼び出すことができます。
Time_nanos Sleepは、PHPでの高精度の遅延を達成するための強力なツールですが、すべてのシステムがそれをサポートしているわけではありません。したがって、開発プロセス中にその互換性を考慮し、睡眠機能を合理的に選択する必要があります。その制限と予防策を理解することで、より堅牢なクロスプラットフォームコードを作成するのに役立ちます。
PHPタイム関数を使用するための詳細およびベストプラクティスについては、公式ドキュメントとコミュニティリソースを参照してください。アドレスは: https://gitbox.net/manual/en/function.time-nanos elep.php