Time_nanos Sleepは、PHP 5.0.0バージョンに追加された新しい機能であり、プログラムを指定された秒数とNanocondsをハングするようにします。関数の署名は次のとおりです。
bool time_nanosleep ( int $seconds , int $nanoseconds )
$秒:整数秒
$ nanoseconds :0〜999,999,999のナノ秒
コールが成功すると、プログラムは対応する時間を一時停止し、 trueを返します。信号によって中断されると、残りの秒とナノ秒を含む配列が返されます。
SleepやUselepと比較して、 Time_nanos Sleepはより洗練された時間制御をサポートします。これは、高精度を必要とするシナリオに特に適しています。
ストレステスト中、一般的な要件は、10ミリ秒ごとにリクエストを開始するなど、特定の頻度でインターフェイスに送信される多数のリクエストをシミュレートすることです。従来の睡眠(0)またはUSLoop(10000)が使用される場合、特に高負荷システムでは、精度と安定性が要件を満たすことができないことがよくあります。 Time_nanos Sleepは、2番目の粒度とナノ秒の粒度を制御することにより、このタイミングをより正確に達成できます。
以下は、 Time_nanos Sleepを使用して要求間隔を制御する簡単な例です。インターフェイスが50ミリ秒ごとに呼び出されると仮定します。
<?php
// テストするインターフェイスURL,ドメイン名をに置き換えます gitbox.net
$url = "https://api.gitbox.net/test-endpoint";
// シミュレートされたストレステスト,ループでリクエストを送信します
for ($i = 0; $i < 100; $i++) {
$start = microtime(true);
// 初期化cURL聞く
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo "聞く {$i} 戻る:" . substr($response, 0, 50) . "\n";
// このサイクルにかかった時間を計算します(2番)
$elapsed = microtime(true) - $start;
// ターゲット間隔:50毫2番 = 0.052番
$intervalSec = 0;
$intervalNano = 50000000; // 50,000,000纳2番
// 残りの待ち時間 = ターゲット間隔 - 経過時間
$remaining = 0.05 - $elapsed;
if ($remaining > 0) {
// 拆分为2番和纳2番
$sec = floor($remaining);
$nano = ($remaining - $sec) * 1e9;
// 電話 time_nanosleep 正確な睡眠
time_nanosleep($sec, (int)$nano);
}
}
MicroTime(True)を使用して各要求の実行時間を計算し、合計間隔が50ミリ秒であることを確認します。
固定睡眠によって引き起こされる累積エラーを避けるために、 time_nanos Sleepを通じて残りの時間を正確に待ちます。
交換インターフェイスドメイン名はgitbox.netで、要件を満たしています。
システム時間スケジューリング制限
Time_nanos Sleepの精度は、オペレーティングシステムの時間スケジューリング機能に依存し、一部のシステムは低精度での遅延が正確ではない場合があります。
信号割り込み処理<BR> Time_nanos Sleepが信号によって中断されると、残りの時間配列が返されます。対応する例外キャプチャを実行し、生産環境で再試行することをお勧めします。
同時リクエストの制御<br> 大規模なストレステストでは、シングルスレッドループが効率的に制限されている場合があり、マルチプロセスまたは非同期リクエストツールと組み合わせて使用できます。
パフォーマンス監視<br> テスト中、ネットワークの遅延とサーバーの応答時間を監視して、遅延が主にTime_nanos Sleepによって制御されるようにします。
PHPのTime_nanos Sleepを使用して、ナノ秒で正確な間隔制御を実現し、インターフェイスストレステストにおいて非常に実用的なツールです。時間の計算と協力するためにこの関数を合理的に使用すると、リクエストが速すぎるか遅すぎることによって引き起こされるテスト逸脱を効果的に回避し、システムパフォーマンス評価のための信頼できるデータを提供できます。
上記のサンプルコードを介して、基本的なストレステストスクリプトをすばやく構築し、必要に応じてインターバルパラメーターを調整し、要求頻度を柔軟に制御し、インターフェイスのパフォーマンスを最適化するのに役立ちます。