#PHP コルーチンとはどういう意味ですか?
PHP コルーチンはスレッドと同等です。スレッドとは、スレッド コンテキストを切り替えるときに、まず前のスレッドのコンテキストを保存してから、次のスレッドを実行する必要があることを意味します。条件が満たされたら、元に切り替えます。スレッドとコンテキストの復元は、コルーチンがユーザーによってスケジュールされるのに対し、スレッドはシステムによってスケジュールされることを除いて、コルーチンにも同じことが当てはまります。
PHP コルーチンの使用法
コルーチンのサポートは反復ジェネレーターに基づいており、ジェネレーターにデータを送り返す機能が追加されています (呼び出し元は、呼び出されたジェネレーター関数にデータを送信します)。 ). これにより、ジェネレータから呼び出し元への一方向通信が、両者の間の双方向通信に変更されます。
データを渡す機能は、実装されたイテレータの send() メソッドを通じて行われます。 logger() コルーチンは、この通信がどのように機能するかを示す例です:
<?php function logger($fileName) { $fileHandle = fopen($fileName, 'a'); while (true) { fwrite($fileHandle, yield . "\n"); } } $logger = logger(__DIR__ . '/log'); $logger->send('Foo'); $logger->send('Bar') ?>
ご覧のとおり、ここでは yield がステートメントとしてではなく式として使用されており、値に展開できます。呼び出し元によって send() メソッドに渡される値です。この例では、yield 式は最初に「Foo」に置き換えられて Log に書き込まれ、次に「Bar」に置き換えられて Log に書き込まれます。
上記の例は、受信者としての yield を示しています。次に、受信と送信を同時に行う方法の例を見てみましょう:<?php function gen() { $ret = (yield 'yield1'); var_dump($ret); $ret = (yield 'yield2'); var_dump($ret); } $gen = gen(); var_dump($gen->current()); // string(6) "yield1" var_dump($gen->send('ret1')); // string(4) "ret1" (the first var_dump in gen) // string(6) "yield2" (the var_dump of the ->send() return value) var_dump($gen->send('ret2')); // string(4) "ret2" (again from within gen) // NULL (the return value of ->send()) ?>
PHP チュートリアル
"以上がPHPコルーチンとはどういう意味ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。