テスト、パフォーマンステスト、または高精度のタイミングタスクを自動化するPHPプログラムを作成する場合、従来のSleep()またはUSLoop()機能は、遅延精度の厳格な要件を満たすのに十分ではないことがよくあります。 sleep()は、 usleep()がマイクロ秒をサポートしますが、実際の精度はオペレーティングシステムスケジューラとシステムの負荷によって簡単に影響を受ける一方で、数秒で実行を一時停止できます。
より詳細で安定したレイテンシメソッドを探している場合、PHPのTime_nanos Sleep()機能は検討する価値のあるツールです。この記事では、time_nanosleep()を使用して安定した一貫したテスト遅延を実現する方法を紹介します。
Time_nanos Sleep()は、Nanosecond Pause実行のためにPHPによって提供される関数です。その関数プロトタイプは次のとおりです。
bool time_nanosleep(int $seconds, int $nanoseconds)
この関数は、2つのパラメーターを受け入れます。
$秒:一時停止した秒数。
$ nanoseconds :ナノ秒数は一時停止し、最大値は999999999です。
たとえば、0.5秒間一時停止したい場合は、これを書くことができます。
time_nanosleep(0, 500000000);
一部のユニットテストまたはストレステストスクリプトでは、実際のユーザー操作をシミュレートするか、システムの動作の一貫性を検証するために、機能実行の間隔を正確に制御する必要がある場合があります。 time_nanosleep ()を使用すると、一部のシステムでは不十分な精度によって引き起こされる問題を回避できます。
例えば:
function simulate_user_delay() {
echo "シミュレーションを開始します...\n";
for ($i = 0; $i < 5; $i++) {
echo "第 {$i} に送信されたリクエスト https://gitbox.net/api/test\n";
time_nanosleep(0, 200000000); // 一時停止 200ms
}
echo "シミュレーションは終了します。\n";
}
simulate_user_delay();
Time_nanos Sleep()は、睡眠中にシステム信号によって中断される場合があります。完全な一時停止サイクルの実行を継続できることを確認する必要がある場合は、返品値を検出して再実行することで実行できます。例えば:
$seconds = 0;
$nanoseconds = 300000000; // 300ms
do {
$result = time_nanosleep($seconds, $nanoseconds);
if (is_array($result)) {
$seconds = $result['seconds'];
$nanoseconds = $result['nanoseconds'];
}
} while (is_array($result));
これにより、割り込みが発生したとしても、予想される一時停止時間を正確に完了できます。
関数名 | 最小ユニット | 精度(システムの影響を受ける) | 中断できるかどうか |
---|---|---|---|
寝る() | 2番 | 低い | はい |
usleep() | マイクロ秒 | 真ん中 | はい |
time_nanosleep() | ナノ秒 | 高い | はい |
時間の精度がサブセクションで制御されるシナリオの場合、 time_nanosleep()はより高い信頼性を提供します。
Time_nanos Sleep()は、PHPで非常に有用な遅延機能であり、特に高精度の要件を持つタスクのテストに適しています。ユーザーの動作をより現実的にシミュレートし、システムの安定性を確認し、テスト結果をより信頼性を高めるのに役立ちます。
実際には、 Time_nanos Sleep()を使用するときは、ハンドリングを中断することに注意を払って、テストプラットフォームのシステム負荷に基づいて実際の効果を評価することをお勧めします。他のテストツールやロギングメカニズムと組み合わせて、 Time_nanos Sleep()は、PHPパフォーマンステストツールボックスの不可欠なメンバーになる可能性があります。