ホームページ  >  記事  >  PHPフレームワーク  >  swooleコルーチンの実装方法

swooleコルーチンの実装方法

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼オリジナル
2019-12-10 16:20:022819ブラウズ

swooleコルーチンの実装方法

Swoole4 は、PHP 言語用の強力な CSP コルーチン プログラミング モデルを提供します。次のコードに示すように、ユーザーは go 関数を通じてコルーチンを作成し、同時実行を実現できます。

実際には、マルチコルーチン プログラミング モードは Swoole4 より前に実装されており、コルーチンの作成、切り替え、終了時に、それに応じて PHP スタックを操作できます (PHP スタックの作成、切り替え、リサイクル)。

現時点でのコルーチン実装は PHP 構文を完全にはサポートできません。根本的な理由は、C スタック情報が保存されないことです。 (VM 内または一部の拡張機能によって提供される API は、C 関数を通じて実装されます。これらの関数を呼び出すときにコルーチンの切り替えが発生した場合、C スタックはどのように処理されるべきですか?)


Swoole4 は、C スタック管理を追加しました。 、コルーチンが作成、切り替え、終了すると、C スタックの作成、切り替え、リサイクルが伴います。


Swoole4 コルーチンの実装計画を次の図に示します。


swooleコルーチンの実装方法##その中:

·API レイヤーは、ユーザーにコルーチン関連の関数を提供します。たとえば、 go() 関数はコルーチンの作成に使用され、Co::yield() は現在のコルーチンに CPU を放棄させます。 Co::resume () は特定のコルーチンの実行を再開できます;

·Swoole4 コルーチンは C スタックと PHP スタックを同時に管理する必要があります。 Cスタックの管理にはCoroutineを、PHPスタックの管理にはPHPCoroutineを使用、このうちCoroutine()、yield()、resume()は、 c stack; create_func()、on_yield()、on_resume() は、php スタックの作成とスワップインを実現します。 C スタックを管理する場合の boost.context ライブラリ make_fcontext() 関数と Jump_fcontext() 関数は両方ともアセンブリ言語で記述され、実装されます C スタック コンテキストの作成と切り替え;

·Swoole4 は、boost.context、つまり Context レイヤー、Context()、SwapIn()、および SwapOut()をカプセル化するだけです。これは、C スタックの作成と C スタックへの入出力のスワップに対応します。

PHP 中国語 Web サイトには、無料の Swoole 入門チュートリアル が多数あり、誰でも学習することができます。

以上がswooleコルーチンの実装方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。