golang - php でコルーチンを実装するために yield を使用する使用シナリオは何ですか?
某草草
某草草 2017-07-03 11:40:23
0
3
1541

コルーチンを使用して協調マルチタスクを実装する PHP に関する記事を目にしましたが、PHP の収量によるコルーチンの実装について説明されていました。しかし、記事が長すぎて読みきれなかったので、ざっと読んでみました。

  • PHP のコルーチンはいつプロジェクトで使用されますか?

  • または、該当するシナリオはありますか?

  • 現在、それをカプセル化するライブラリはありますか?

某草草
某草草

全員に返信(3)
Ty80

コルーチンを非同期ネットワーク IO で使用して、ノンブロッキングにすることができます。

たとえば、http リクエストを実行していて、外部インターフェイスをリクエストする必要がある場合、次のシナリオが発生します。

フロントエンドサーバーは nginx です。nginx はノンブロッキングで非同期ですが、php-fpm は同期でブロッキングです。その後、外部インターフェイスをリクエストすると、タスクはブロックされます。 (ここに追加すると、php-fpmのワーカープロセスは同期的にブロックされます)

コルーチンを使用すると、インターフェイスをリクエストしているときに、タスクを一時停止してコンテキストを保存できます。その後、インターフェイスが戻ったら、タスクを再度開始して実行を続行します。プロセスはこのタスクに時間を費やす必要がなく、他の http リクエストを処理できます。これは同時実行の量が多いことを意味しますか?

同様に、リクエストがデータベースにクエリを実行している場合、それも IO リクエストであり、同期的です。コルーチンを使用すると、IO プログラミングを非同期かつノンブロッキングにすることができるため、同時実行性が向上します。これにより、主に、CPU が IO を待機している間に他の処理を実行できるようになります。すべての IO リクエストはコルーチンを通じてこれを行うことができます。

あなたのこの記事を読みました、とても良い記事です。ここで著者は、yield を使用してタスク スケジュールを実装し、上で説明したことを実行します。ニアオ兄弟による翻訳 http://www.laruence.com/2015/... もご覧ください。これは、ご覧になった翻訳の補足と言えます。彼は、yield を通じて非同期ノンブロッキング サーバーを実装しました。これはもちろん単なるデモです。例を見たほうが分かりやすいでしょう。

いいねを押す +0
仅有的幸福

これまでに私が遭遇したことは、laravelフレームワークモデルがデータをフェッチするためにカーソルを使用するとき、一度に多量のデータをフェッチすることによって引き起こされるメモリ不足の問題を防ぐためにyieldが使用されるということです

いいねを押す +0
某草草

最も基本的なことは、大量のデータを Excel にインポートまたはエクスポートすることで、データを処理する必要があることを前提としています。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!