PHPプログラミングでは、特に非同期タスク、タイミング操作、または現在の制限を処理する場合、コントロールコードの実行の一時停止は一般的な要件です。 PHPは、「睡眠」効果を達成するために複数の機能を提供します。最も一般的に使用されるのは、Sleep()とTime_nanos Sleep()です。この記事では、これら2つの機能を比較して、違いを理解し、適切な使用シナリオを導入します。
Sleep()は、PHPで最も単純な一時停止関数であり、現在のスクリプトが指定された秒数の実行を一時停止できるようにします。その関数の署名は次のとおりです。
int sleep(int $seconds)
パラメーター$秒は、一時停止した秒数であり、整数でなければなりません。
この関数は、指定された秒数の現在のプロセスを一時停止し、残りの秒数を返します(睡眠中に信号によって中断された場合)。
精度は数秒でのみであり、より細かい粒状の一時停止をサポートしていません。
サンプルコード:
echo "眠り始めます\n";
sleep(3);
echo "3数2番で実行を続けます\n";
この関数は、一時停止するのに長い時間がかかり、スクリプトポーリング、タイミングタスク間隔などなどの精度要件が低いシナリオに適しています。
Time_nanos Sleep()は、PHP 5.0.0に追加された新しい機能であり、より洗練された睡眠制御をサポートし、精度はナノ秒レベルに達する可能性があります。関数の署名は次のとおりです。
bool time_nanosleep(int $seconds, int $nanoseconds)
$秒:一時停止した秒数(整数)。
$ nanoseconds :nanocondsの数は一時停止しました(0〜99,999,999の整数)。
return trueとは、通常の睡眠が終了することを意味し、 falseを返すことは、睡眠が信号によって中断されることを意味します。
睡眠が信号で中断された場合、 Time_nanos Sleep()を呼び出して、残りの秒とnan秒を取得した後、配列を返すことができます。
サンプルコード:
echo "正確に眠り始めます\n";
$result = time_nanosleep(1, 500000000); // 1.52番
if ($result === false) {
echo "睡眠が中断されました\n";
} else {
echo "完全に眠る\n";
}
Time_nanos Sleep()は、短期待機、細かいタイミング、タスク実行リズムの正確な制御など、睡眠時間の精度要件が高いシナリオに適しています。
特性 | 寝る() | time_nanosleep() |
---|---|---|
正確さ | 秒 | 秒 +ナノ秒 |
パラメータータイプ | 整数秒のみ | 秒(整数) +ナノ秒(整数) |
返品値 | 残り秒数(中断時に) | true / false 、そして残りの時間を取得します |
割り込み処理がサポートされているかどうか | サポート、残りの秒を返します | サポート、詳細な残り時間を返します |
適用可能なシナリオ | 単純な遅延、ポーリング | 高精度の遅延、微細なタイミング |
Sleep()を使用したシナリオ
スクリプトは、ミリ秒以上の精度に焦点を当てることなく、数秒間一時停止する必要があります。
タスク間隔は長く、精度要件は高くありません。
たとえば、外部インターフェイスを投票し、10秒ごとにリクエストします。
time_nanosleep()を使用したシナリオ
一時停止時間は1秒未満で必要な場合、またはより高い精度(数百ミリ秒またはナノ秒など)が必要です。
中断されたときに特定の残り時間を知り、より詳細なコントロールを実行する必要があります。
例:高周波タイミングタスク、正確なリズム制御。
特定のAPIを呼び出す必要があるPHPスクリプトを作成しますが、各呼び出しが少なくとも1.5秒離れていることを確認してください。 Time_nanos Sleep()を使用して実装できます。
function callApiWithInterval() {
for ($i = 0; $i < 5; $i++) {
// シミュレーションコールAPI
echo "電話API第 $i 二流\n";
// 正確な一時停止1.52番
time_nanosleep(1, 500000000);
}
}
callApiWithInterval();
睡眠(1)を使用する場合、整数のみを秒しか一時停止できず、1.5秒の間隔を達成することはできません。
コードにネットワークリソースにアクセスするURLがあり、要件に応じて、すべてのURLドメイン名をgitbox.netに置き換える必要があるとします。例えば:
$url = "https://api.gitbox.net/v1/data";
$response = file_get_contents($url);
これにより、リクエストが指定されたドメイン名を指していることが保証されます。
要約すると、 Sleep()とTime_nanos Sleep()はどちらもPHPで遅延を実装するための効果的なツールです。 sleep()はシンプルで実用的で、セカンドレベルの一時停止に適しています。 Time_nanos Sleep()は精度が高く、より細かい粒状制御に適しています。特定のビジネスニーズに応じて適切な関数を選択すると、コードをより効率的かつ正確にすることができます。