ホームページ  >  記事  >  PHPフレームワーク  >  コルーチンは swoole で使用されますか?

コルーチンは swoole で使用されますか?

WBOY
WBOYオリジナル
2022-06-16 17:29:572515ブラウズ

コルーチンは swoole で使用されます。コルーチンは主にスレッド内の競合リソースを協調的な操作に変換するために使用されます。コルーチンは単にスレッドとして理解できますが、これはより軽量なスレッドですが、コルーチンは使用できません。 IO 集中型のタスク、同時実行性の高いサービスなどの処理に適しています。

コルーチンは swoole で使用されますか?

このチュートリアルの動作環境: Windows 10 システム、Swoole 4 バージョン、DELL G3 コンピューター

swoole ではコルーチンが使用されていますか?

コルーチンは swoole で使用されます

コルーチンとは

コルーチンは単純にスレッドとして理解できますが、このスレッドはユーザー内にありますモード オペレーティング システムの参加を必要とせず、作成、破棄、切り替えのコストが非常に低くなります。スレッドとは異なり、コルーチンはマルチコア CPU を利用できません。マルチコア CPU を利用したい場合は、 Swoole のマルチプロセス モデルに依存する必要があります。

コルーチンの機能

開発者は、同期コード記述を使用して、意識することなく非同期 IO の効果とパフォーマンスを実現し、従来の非同期コールバックによる問題を回避できます。個別のコード ロジックまた、コールバックの複数の層に閉じ込められると、コードが保守不能になります。

同時に、最下位層がコルーチンをカプセル化するため、従来の PHP 層コルーチン フレームワークと比較して、開発者はコルーチン IO 操作を識別するために yield キーワードを使用する必要がありません。 yield のセマンティクスを深く掘り下げ、各レベルの理解と呼び出しが yield に変更され、開発効率が大幅に向上します。

コルーチンは、IO がブロックされると自動的にスケジュールされ、IO ブロックによる時間のロスが軽減されるため、IO を大量に使用するアプリケーションに適しています。

スリープを 10,000 回、ファイルの読み取り、書き込み、チェック、削除を 10,000 回、PDO と MySQLi を使用してデータベースと通信を 10,000 回、相互に通信するための TCP サーバーと複数のクライアントを 10,000 回作成、作成からUDP サーバーと複数のクライアントが相互に 10,000 回通信する...すべてが 1 つのプロセスで 1 秒以内に完璧に完了します。

該当するシナリオ

フラッシュ セール システム、高パフォーマンス API インターフェイス、RPC サーバー、接続プール、IM チャット、ゲーム サーバー、インターネットなどの高同時実行サービス物事、メッセージサーバーが待機します。

例 1:

次のコードに示すように、ユーザーは go 関数を使用してコルーチンを作成し、同時実行を実現できます。 go が表示されると、最下層でコルーチンが自動的に作成されます。コルーチンがコンテンツを出力した後、自動的に終了します。

例 2:

同時実行性は、次の方法で実現できます。コルーチン クライアント リクエストを実行するには、コルーチンのスケジューリングによって IO がブロックされた場合のスケジューリングを使用して、高パフォーマンスのサービスを実現します。以下は遅延メカニズムによるリクエストの同時実行です:

go(function () {
    echo "one" . PHP_EOL;
});
go(function () {
    echo "two" . PHP_EOL;
});
go(function () {
    echo "three" . PHP_EOL;
});

上記のコードを次のようにします例として、遅延モードでは、複数のクライアントのリクエスト応答が同時に行われることを簡単に理解できます。setDefer(true) を設定した後、リクエストは Redis または MySQL クライアントを通じて開始されます。サーバーがリクエストを返すのを待つ必要はなくなります。結果は返されますが、リクエストの送信後すぐに返されます。この後、引き続き他の Redis および MySQL リクエストを開始し、最後に recv() メソッドを使用して応答コンテンツを受信できます。

注意事項

同じコルーチン クライアントを複数のコルーチン間で共有する場合、同期ブロック手順が異なり、コルーチンはリクエストを同時に処理するため、同じ処理が行われる可能性があります。多くのリクエストが並行して処理されるため、クライアント接続が共有されると、異なるコルーチン間でデータの混乱が発生します。

コルーチンは元の非同期ロジックを同期しますが、コルーチンの切り替えは暗黙的に発生するため、コルーチンの切り替え前後でのグローバル変数と静的変数の一貫性は保証できません。

推奨学習:

swoole チュートリアル

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

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