現在の位置: ホーム> 最新記事一覧> Time_nanos SleepとSleepとその使用シナリオの違い

Time_nanos SleepとSleepとその使用シナリオの違い

gitbox 2025-05-26

PHPプログラミングでは、特に非同期タスク、タイミング操作、または現在の制限を処理する場合、コントロールコードの実行の一時停止は一般的な要件です。 PHPは、「睡眠」効果を達成するために複数の機能を提供します。最も一般的に使用されるのは、Sleep()Time_nanos Sleep()です。この記事では、これら2つの機能を比較して、違いを理解し、適切な使用シナリオを導入します。

1。Sleep()関数

Sleep()は、PHPで最も単純な一時停止関数であり、現在のスクリプトが指定された秒数の実行を一時停止できるようにします。その関数の署名は次のとおりです。

 int sleep(int $seconds)
  • パラメーター$秒は、一時停止した秒数であり、整数でなければなりません。

  • この関数は、指定された秒数の現在のプロセスを一時停止し、残りの秒数を返します(睡眠中に信号によって中断された場合)。

  • 精度は数秒でのみであり、より細かい粒状の一時停止をサポートしていません。

サンプルコード:

 echo "眠り始めます\n";
sleep(3);
echo "3数2番で実行を続けます\n";

この関数は、一時停止するのに長い時間がかかり、スクリプトポーリング、タイミングタスク間隔などなどの精度要件が低いシナリオに適しています。

2。Time_nanosLoop()関数

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()は、短期待機、細かいタイミング、タスク実行リズムの正確な制御など、睡眠時間の精度要件が高いシナリオに適しています。

3。両者の違いの概要

特性寝る() time_nanosleep()
正確さ秒 +ナノ秒
パラメータータイプ整数秒のみ秒(整数) +ナノ秒(整数)
返品値残り秒数(中断時に) true / false 、そして残りの時間を取得します
割り込み処理がサポートされているかどうかサポート、残りの秒を返しますサポート、詳細な残り時間を返します
適用可能なシナリオ単純な遅延、ポーリング高精度の遅延、微細なタイミング

4。適用されるシナリオの提案

  • Sleep()を使用したシナリオ

    • スクリプトは、ミリ秒以上の精度に焦点を当てることなく、数秒間一時停止する必要があります。

    • タスク間隔は長く、精度要件は高くありません。

    • たとえば、外部インターフェイスを投票し、10秒ごとにリクエストします。

  • time_nanosleep()を使用したシナリオ

    • 一時停止時間は1秒未満で必要な場合、またはより高い精度(数百ミリ秒またはナノ秒など)が必要です。

    • 中断されたときに特定の残り時間を知り、より詳細なコントロールを実行する必要があります。

    • 例:高周波タイミングタスク、正確なリズム制御。

5。例と組み合わせて:頻度制御を要求します

特定の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秒の間隔を達成することはできません。

6。URL交換について

コードにネットワークリソースにアクセスする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()は精度が高く、より細かい粒状制御に適しています。特定のビジネスニーズに応じて適切な関数を選択すると、コードをより効率的かつ正確にすることができます。