Fiber:協調的な並行処理
Fiberを使ってPHPの実行を一時停止・再開し、非同期に似たパターンを実現します
「Fiber:協調的な並行処理」はCoddyKit上の無料PHP Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPHP Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 PHP Academyコースには全4レッスンが含まれています。
Fiberとは
PHP 8.1でFibersが導入されました。これは特定の位置で実行を一時停止し、後から再開できる軽量なコルーチンで、協調的マルチタスクを可能にします。
Fiberと非同期処理
Fiberは並列スレッドではありません。PHPは引き続きシングルスレッドで動作します。Fiberを使うと、ある実行コンテキストから別の実行コンテキストへ自発的に制御を譲れるため、非同期処理に似たパターンを実現できます。
Fiberの作成
コンストラクターに callable を渡して Fiber を作成します。Fiber は start() を呼び出すまで開始されません。
<?php
$fiber = new Fiber(function (): void {
echo "Fiber started\n";
$value = Fiber::suspend("first suspension");
echo "Resumed with: $value\n";
});
開始と一時停止
start() は最初の Fiber::suspend() まで Fiber を実行します。suspend() に渡された値が start() から返されます。
<?php
$suspended = $fiber->start(); // runs until suspend()
echo $suspended; // "first suspension"
Fiber の再開
resume($value) は、Fiber が一時停止した箇所から処理を続行します。resume() に渡された値が、Fiber 内の Fiber::suspend() から返されます。
<?php
$fiber->resume("hello from main");
// Inside fiber: $value = "hello from main"
// Prints: "Resumed with: hello from main"Fiber の完全な例
Fiber の完全なライフサイクルです。作成、開始、一時停止、再開、終了を行います。
<?php
$fiber = new Fiber(function (): string {
$x = Fiber::suspend("paused");
return "Fiber done, received: $x";
});
$msg = $fiber->start(); // "paused"
$fiber->resume("hi!");
echo $fiber->getReturn(); // "Fiber done, received: hi!"Fiber の状態メソッド
Fiber の状態を isStarted()、isSuspended()、isRunning()、isTerminated() で確認します。
<?php
var_dump($fiber->isTerminated()); // true after getReturn()Fiber のエラー処理
$fiber->throw(new Exception(...)) を使って Fiber に例外をスローします。例外は Fiber 内の Fiber::suspend() の箇所で発生します。
イベントループとの統合
Fiber はイベントループ(ReactPHP、Revolt)を動かすために設計されています。I/O コールバックは待機中に一時停止し、データが到着すると再開します。
Fiber とジェネレーターの比較
ジェネレーター(PHP 5.5 以降)も yield で一時停止できますが、主な用途は遅延反復です。Fiber は、値の双方向受け渡しと戻り値に対応した、より汎用的なコルーチン機構です。
実用的なユースケース
Fiber は、Revolt のノンブロッキング HTTP クライアント、非同期データベースクエリ、協調的なタスクスケジューラー、マルチスレッドの複雑さを伴わないストリーミングデータパイプラインなどを支えます。
まとめ
Fiber を使うと、1つの PHP 実行コンテキストを一時停止・再開でき、協調的な並行処理が可能になります。Fiber は現代の PHP 非同期フレームワークの基盤です。Fiber::suspend() は制御を譲り、resume() は制御を戻します。
クイックチェック
一時停止中の Fiber に値を渡すには、どうすればよいですか?
AI チューターと学ぶ PHP — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 49
- レッスン
- 195
よくある質問
「Fiber:協調的な並行処理」レッスンは無料ですか?
はい。「Fiber:協調的な並行処理」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、PHP Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 PHP Academyコースには全4レッスンが含まれています。
「Fiber:協調的な並行処理」で何を学びますか?
Fiberを使ってPHPの実行を一時停止・再開し、非同期に似たパターンを実現します ブラウザで直接実行するハンズオンコードでPHP Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
PHP Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのPHP Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「Fiber:協調的な並行処理」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このPHP Academyレッスンでコードを書いて実行できますか?
はい。すべてのPHP Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- match式と名前付き引数
- Nullsafe演算子と共用体型
- 列挙型(Enum)
- Fiber:協調的な並行処理