web-dev-qa-db-ja.com

Spring MVC(非同期)vs Spring WebFlux

私はSpring WebFluxを理解しようとしています。私がこれまでに見つけたものは、コアでのリアクティブであり、サーブレットAPI、リクエストごとのスレッド、HTTP 2、サーバープッシュ、アプリケーション/ストリーム+ jsonがありません。

しかし、Spring MVCの非同期呼び出しの違いは何ですか? Spring MVCでは、FutureやDefferedResultなどを返すと、別のスレッドで実行されるリクエストハンドラー(コントローラーメソッド)のロジックが取得されるため、リクエストをディスパッチするためのスレッドプールリソースを節約することもできます。

それに関連する違いを強調していただけますか?ここでWebFluxが優れているのはなぜですか?

ご清聴ありがとうございました!

41

サーブレット非同期モデルは、コンテナスレッド(1サーブレットリクエスト/スレッドモデル)とアプリケーションでのリクエストの処理との間に非同期境界を導入します。処理は別のスレッドで発生するか、待機します。最後に、コンテナスレッドにディスパッチして、ブロック方式で読み取り/書き込みを行う必要があります(InputStreamおよびOutputStreamは本質的にブロッキングAPIです)。

このモデルでは、並行性を実現するために多くのスレッドが必要です(それらの多くはI/Oを待機してブロックされる可能性があるため)。これにはリソースがかかり、ユースケースによってはトレードオフになる場合があります。

ノンブロッキングコードを使用すると、多数のリクエストを同時に処理するために必要なスレッドはわずかです。これは異なる並行性モデルです。他のモデルと同様に、それに伴うメリットとトレードオフがあります。

この比較の詳細については、この サーブレットとリアクティブスタックの話 が重要です。

37
Brian Clozel