コルーチンでは、他のタスクが引き続き実行できるように、現在実行中のタスクが自動的に制御をスケジューラーに戻す必要があります。これは、スケジューラがその意図に関係なく実行中のタスクを強制的に中断できるプリエンプティブ マルチタスクとはまったく逆です。
#制御を自動的に引き継ぐプログラムだけに依存している場合、一部の悪意のあるプログラムは他のタスクと共有せずにすべての CPU 時間を簡単に占有してしまいます。
コルーチンのスケジューリングは、コルーチン自体が積極的に制御を外部スケジューラーに放棄することによって実装されます。
xrange 関数を実装するジェネレーターの例に戻ると、実行プロセス全体は次のようになります。次の図を使用してそれを表します。
コルーチンは、プリエンプションではなくコラボレーションを通じてタスクの切り替えを実行する純粋なユーザー モード スレッドとして理解できます。 (推奨学習: PHP プログラミングの入門から習熟まで )
プロセスやスレッドと比較して、コルーチンのすべての操作はオペレーティング システムではなくユーザー モードで実行できます。カーネル ステートフルの完了、作成、切り替えのコストは非常に低いです。
簡単に言えば、コルーチンは、現在のタスクの実行を中断し、現在のローカル変数を保存し、次回実行を継続するために現在のローカル変数を復元するメソッドを提供します。
コルーチン コルーチンのサポートはジェネレーターに基づいており、ジェネレーターにデータを送り返す機能が追加されています (呼び出し元は呼び出されたジェネレーター関数にデータを送信します)。これにより、ジェネレーターは呼び出し元の一方向通信を実現します。
#コルーチンを使用した後のコード
初稿、手動調整ジェネレーターの実行
そうです
以上がPHPコルーチンとはの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。