コルーチンを使用して協調マルチタスクを実装する PHP に関する記事を目にしましたが、PHP の収量によるコルーチンの実装について説明されていました。しかし、記事が長すぎて読みきれなかったので、ざっと読んでみました。
PHP のコルーチンはいつプロジェクトで使用されますか?
または、該当するシナリオはありますか?
現在、それをカプセル化するライブラリはありますか?
PHP中文网2017-07-03 11:42:23
コルーチンを非同期ネットワーク IO で使用して、ノンブロッキングにすることができます。
たとえば、http リクエストを実行していて、外部インターフェイスをリクエストする必要がある場合、次のシナリオが発生します。
フロントエンドサーバーは nginx です。nginx はノンブロッキングで非同期ですが、php-fpm は同期でブロッキングです。その後、外部インターフェイスをリクエストすると、タスクはブロックされます。 (ここに追加すると、php-fpmのワーカープロセスは同期的にブロックされます)
コルーチンを使用すると、インターフェイスをリクエストしているときに、タスクを一時停止してコンテキストを保存できます。その後、インターフェイスが戻ったら、タスクを再度開始して実行を続行します。プロセスはこのタスクに時間を費やす必要がなく、他の http リクエストを処理できます。これは同時実行の量が多いことを意味しますか?
同様に、リクエストがデータベースにクエリを実行している場合、それも IO リクエストであり、同期的です。コルーチンを使用すると、IO プログラミングを非同期かつノンブロッキングにすることができるため、同時実行性が向上します。これにより、主に、CPU が IO を待機している間に他の処理を実行できるようになります。すべての IO リクエストはコルーチンを通じてこれを行うことができます。
あなたのこの記事を読みました、とても良い記事です。ここで著者は、yield を使用してタスク スケジュールを実装し、上で説明したことを実行します。ニアオ兄弟による翻訳 http://www.laruence.com/2015/... もご覧ください。これは、ご覧になった翻訳の補足と言えます。彼は、yield を通じて非同期ノンブロッキング サーバーを実装しました。これはもちろん単なるデモです。例を見たほうが分かりやすいでしょう。
仅有的幸福2017-07-03 11:42:23
これまでに私が遭遇したことは、laravelフレームワークモデルがデータをフェッチするためにカーソルを使用するとき、一度に多量のデータをフェッチすることによって引き起こされるメモリ不足の問題を防ぐためにyieldが使用されるということです