Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【PHP8.x】usleep()関数の使い方

usleep関数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

usleep関数は、プログラムの実行を一時的に停止(スリープ)させる関数です。この関数は、指定された時間だけプログラムの処理を中断し、その後、中断した時点から処理を再開させます。停止時間はマイクロ秒(100万分の1秒)単位で指定します。具体的には、usleep(microseconds)のように、停止させたいマイクロ秒数を整数値で引数として渡します。たとえば、usleep(100000)と記述すると、プログラムは0.1秒間一時停止します。

この関数は、特定の処理の間に短い間隔を設けたい場合や、リソースへのアクセス頻度を調整したい場合などに利用されます。ただし、usleep関数による一時停止は、指定された時間に厳密に従うことを保証するものではありません。オペレーティングシステムや環境によっては、指定した時間よりも長く停止する可能性があり、高精度な時間制御には適さない場合があります。また、この関数が実行されている間、プログラム全体の処理は完全にブロックされますので、他の並行処理が必要な場合には注意が必要です。usleep関数は戻り値を返しません。プログラムの流れを一時的に調整するシンプルな手段としてご活用ください。

構文(syntax)

1<?php
2
3usleep(int $microseconds): void;
4
5?>

引数(parameters)

int $microseconds

  • int $microseconds: 処理を停止させるマイクロ秒数を指定する整数

戻り値(return)

void

指定されたマイクロ秒数だけプログラムの実行を一時停止させます。戻り値はありません。

サンプルコード

PHP usleep で0.5秒待機する

1<?php
2
3echo "0.5秒間、プログラムの実行を一時停止します...\n";
4
5// usleep関数は、指定されたマイクロ秒数だけプログラムの実行を一時停止します。
6// 1秒は1,000,000マイクロ秒なので、0.5秒は 500,000マイクロ秒に相当します。
7usleep(500000);
8
9echo "0.5秒間の待機が終了しました。\n";
10
11?>

PHP 8で利用できるusleep関数は、プログラムの実行を一時的に停止させる機能を提供します。この関数は、引数としてint $microseconds(整数値のマイクロ秒)を取ります。ここでいうマイクロ秒とは、1秒の100万分の1を表す単位です。例えば、0.5秒間プログラムを停止させたい場合、1秒が1,000,000マイクロ秒なので、その半分の500,000マイクロ秒を指定してusleep(500000)と記述します。これにより、指定されたマイクロ秒数の間、プログラムの次の処理が開始されずに待機します。

戻り値はvoidであるため、usleep関数自体は処理が完了しても、呼び出し元に特定の結果を何も返しません。単に指定された時間だけ待機するという役割に徹します。この機能は、連続する処理の間に短い間隔を設けたい場合や、特定のタイミングで処理を行いたい場合などに便利です。サンプルコードでは、「0.5秒間、プログラムの実行を一時停止します...」というメッセージを表示した後、usleep(500000)によって0.5秒間の待機を実行し、その後に「0.5秒間の待機が終了しました。」というメッセージが表示されることで、動作を確認できます。

usleep関数は引数に「マイクロ秒」を指定します。1秒は1,000,000マイクロ秒ですので、単位を間違えないようご注意ください。この関数はプログラム全体の実行を一時停止させるため、特にWebアプリケーションなどで使用すると、ユーザーからのリクエスト処理がブロックされ、応答速度の低下やサーバーの負荷増大につながる可能性があります。長時間の待機は避けるべきです。また、指定した時間通りに完全に停止するとは限らず、実行環境やシステム負荷によって多少の誤差が生じることがあります。本番環境での利用には十分な検討が必要です。

PHP usleep で半秒間一時停止する

1<?php
2
3// プログラムの実行を指定されたマイクロ秒数だけ一時停止します。
4// 1秒は1,000,000マイクロ秒です。
5// キーワード「half second (0.5秒)」に対応するため、500,000マイクロ秒を指定します。
6
7echo "0.5秒間、プログラムの実行を一時停止します...\n";
8
9// usleep(マイクロ秒) を使って、500,000マイクロ秒 (0.5秒) 待機します。
10// PHP 7.4以降では、数値を読みやすくするためにアンダースコアを区切り文字として使用できます。
11usleep(500_000);
12
13echo "0.5秒が経過しました。\n";
14
15?>

PHPのusleep関数は、プログラムの実行を指定されたマイクロ秒数だけ一時停止させるために使用します。この関数は、特定の処理のタイミングを調整したい場合などに役立ちます。

引数 $microseconds には、プログラムを一時停止させたい時間をマイクロ秒単位の整数で指定します。1秒は1,000,000マイクロ秒であるため、例えばキーワードである「half second(0.5秒)」一時停止させたい場合は、500,000を指定することになります。戻り値は void であり、この関数は処理結果として値を返しません。

サンプルコードでは、最初に「0.5秒間、プログラムの実行を一時停止します...」というメッセージを表示します。次に、usleep(500_000)が実行され、500,000マイクロ秒(つまり0.5秒)の間、プログラムの実行が一時停止します。PHP 7.4以降では、このような大きな数値を読みやすくするために、アンダースコアを区切り文字として使用できます。一時停止期間が終了すると、「0.5秒が経過しました。」というメッセージが表示され、プログラムの実行が再開されます。

usleep関数は、引数で指定した「マイクロ秒」の間、プログラムの実行を一時停止します。1秒は1,000,000マイクロ秒なので、単位の扱いに注意が必要です。この関数は戻り値を返さないため、実行の成功・失敗を直接確認することはできません。指定された待機時間はOSのスケジューリングに依存し、厳密な精度は保証されず、わずかに長く待機する場合があります。特にWebサーバー環境では、長時間の一時停止はリクエストのタイムアウトを引き起こす可能性があるので、利用には注意が必要です。サンプルコードの500_000のように数値をアンダースコアで区切る記法は、PHP 7.4以降で読みやすさのために導入された機能です。

PHP usleepで指定時間待機する

1<?php
2
3declare(strict_types=1); // 厳格な型チェックを有効にする
4
5// 処理開始時刻を表示します。
6echo "処理開始: " . date('H:i:s.v') . "\n";
7
8// 待機するマイクロ秒数を定義します。
9// 1秒 = 1,000,000マイクロ秒です。ここでは2秒間待機するように設定します。
10$microseconds_to_sleep = 2000000;
11
12// usleep関数は、指定されたマイクロ秒数だけスクリプトの実行を一時停止します。
13// これは同期的な(ブロッキングな)待機です。
14// スクリプトはこの行で指定時間停止し、その後次の行に進みます。
15echo "{$microseconds_to_sleep}マイクロ秒 ({$microseconds_to_sleep / 1000000}秒) 待機します...\n";
16usleep($microseconds_to_sleep);
17
18// 待機後の時刻を表示し、時間が経過したことを確認します。
19echo "処理再開: " . date('H:i:s.v') . "\n";
20
21?>

PHPのusleep関数は、現在実行中のスクリプトを、指定されたマイクロ秒数だけ一時停止させるために使用されます。これは、特定の処理の間に短い間隔を設けたい場合や、システムリソースを一時的に解放したい場合などに役立ちます。

この関数は、int $microsecondsという整数型の引数を一つ取ります。この引数には、スクリプトを停止させたい時間をマイクロ秒単位で指定します。例えば、1秒間待機させたい場合は1000000、2秒間待機させたい場合は2000000と記述します。usleep関数は値を何も返さない(void)ため、戻り値を受け取る必要はありません。

提供されたサンプルコードでは、まずdeclare(strict_types=1);で厳格な型チェックを有効にしています。次に、処理開始時刻を表示し、スクリプトがいつ開始したかを確認します。その後、$microseconds_to_sleep変数に2000000(2秒)を設定し、この値を引数としてusleep()関数を呼び出しています。この呼び出しが行われると、スクリプトの実行は指定された2秒間、完全に停止します。この間、プログラムは次の行に進まず、待機状態となります。待機が完了すると、スクリプトは自動的に次の行に進み、処理再開時刻を表示することで、実際に時間が経過したことを確認できます。このようにusleepは、指定された時間だけ処理を同期的にブロックし、その間は他の処理を行いません。

usleep関数は、指定したマイクロ秒数だけスクリプトの実行を一時停止します。引数は「マイクロ秒」単位であるため、1秒が100万マイクロ秒であることを理解し、単位の間違いに注意してください。この関数はスクリプト全体を完全に停止させる「ブロッキング処理」です。ウェブサーバー環境などで長時間待機させると、他のユーザーのリクエスト処理も停止し、システム全体の応答性が低下する原因となります。また、OSやシステム負荷によっては、指定した時間より短くなったり長くなったりと、待機時間が厳密に保証されない場合がある点も認識しておきましょう。特にWindows環境では、精度が低くなる傾向があります。

PHP usleepによる処理負荷軽減デモ

1<?php
2
3/**
4 * usleep関数を使用して、指定されたマイクロ秒数だけプログラムの実行を一時停止し、
5 * 処理の遅延が全体の実行時間にどう影響するかを示します。
6 * これは、システムへの負荷を軽減したり、APIのレート制限に対応したりする際に役立ちます。
7 *
8 * @param int $iterations 繰り返す処理の回数。
9 * @param int $sleepMicroseconds 各処理の後に一時停止するマイクロ秒数 (1秒 = 1,000,000マイクロ秒)。
10 */
11function demonstrateUsleepEffect(int $iterations, int $sleepMicroseconds = 0): void
12{
13    $startTime = microtime(true); // 処理開始時刻を記録
14
15    echo "--- usleepデモンストレーション (繰り返し回数: {$iterations}, 遅延: "
16        . ($sleepMicroseconds > 0 ? "{$sleepMicroseconds}μs" : "なし") . ") ---\n";
17
18    for ($i = 1; $i <= $iterations; $i++) {
19        echo "  作業項目 {$i} を処理中...\n";
20        if ($sleepMicroseconds > 0) {
21            usleep($sleepMicroseconds); // 指定されたマイクロ秒数だけ実行を一時停止
22        }
23    }
24
25    $endTime = microtime(true); // 処理終了時刻を記録
26    $totalTime = $endTime - $startTime; // 合計実行時間を計算
27
28    echo "--- デモンストレーション終了。合計時間: " . round($totalTime, 4) . "秒 ---\n\n";
29}
30
31// 例1: usleepを使用しない場合(遅延なし)
32// 短時間で多くの処理が実行され、システムへの瞬間的な負荷が高まる可能性があります。
33demonstrateUsleepEffect(5);
34
35// 例2: 各処理の間に100,000マイクロ秒 (0.1秒) の遅延を入れる場合
36// これにより、処理が分散され、短期間でのシステム負荷を抑制できます。
37demonstrateUsleepEffect(5, 100000);
38
39?>

PHPのusleep関数は、プログラムを指定のマイクロ秒数だけ一時停止させます。引数$microsecondsで一時停止時間をマイクロ秒単位(1秒=1,000,000μs)で整数指定し、戻り値はvoidです。この関数は処理後、特に値を返しません。

サンプルコードは、usleepの有無が繰り返し処理の実行時間に与える影響を示しています。usleepを使わない場合、処理は連続して高速に実行されるため、短時間でシステムに高い負荷がかかる恐れがあります。一方、usleepで各処理の間に意図的な遅延(例えば0.1秒)を挿入すると、処理が時間的に分散されます。これにより、サーバーやデータベースなど、システムへの瞬間的な負荷集中を緩和し、安定稼働に貢献します。具体的には、システム全体の負荷軽減や、外部APIの呼び出し回数に制限がある「レート制限」への対応などに活用できます。

usleep関数は引数で指定されたマイクロ秒数(1秒の100万分の1)だけプログラムの実行を一時停止します。引数の単位をミリ秒や秒と混同しないよう注意が必要です。この関数は、APIのレート制限への対応や瞬間的なシステム負荷の軽減には効果的ですが、その分プログラム全体の実行時間は長くなります。特にWebアプリケーションでは、長時間usleepを使用すると、サーバーのリソースを占有し続け、タイムアウトや同時処理可能リクエスト数に影響を与える可能性があります。また、実際の停止時間はOSのスケジューリングに依存するため、指定した時間とわずかな誤差が生じることがあります。これは同期的な処理であり、待機中はPHPスクリプトが他の処理を行えない点も理解しておくことが重要です。

関連コンテンツ

関連プログラミング言語