5

ReactorとRxJavaを使用してリアクティブスタイルのコードを勉強し続けています。私はリアクティブコーディングがシングルスレッド実行に比べてCPUの利用率を向上させることを理解しています。リアクティブプログラミングのメリット/デメリット

リアクティブプログラミングとWebベースアプリケーションの命令型プログラミングの具体的な比較はありますか?

非反応型プログラミングよりもリアクティブプログラミングを使用することで、パフォーマンスの向上、スループットはどれくらいですか?

また、リアクティブプログラミングのメリットとデメリットは何ですか?

統計的ベンチマークはありますか?

答えて

8

リアクティブプログラミングとは、ネットワークコールなどのすべてのIOバウンドタスクを非同期で実行していることを意味します。アプリケーションが外部REST APIまたはデータベースを呼び出すとすると、その呼び出しを非同期で行うことができます。そうした場合、現在のスレッドはブロックされません。 1つまたは少数のスレッドを生成するだけで、多くの要求を処理できます。ブロッキング手法に従う場合は、それぞれの要求を処理するために1つのスレッドを持つ必要があります。詳細は、part onepart twopart threeの投稿を参照してください。

それ以外の場合は、コールバックを使用して同じことを行うことができます。コールバックを使用して非同期呼び出しを行うことができます。しかし、あなたがそうすると、時にはコールバック地獄で終わることがあります。あるコールバックを別のコールバック内に置くと、非常に複雑なコードが生成されます。一方、RxJavaは、シンプルで、構成可能で、読みやすい非同期コードを作成することができます。また、RxJavaはMap、Zipなどの強力な演算子を多数提供しています。これにより、コードはずっとシンプルになり、お互いに依存しない別々のタスクの並列実行によりパフォーマンスが向上します。

RxJavaは、演算子のセットを持つObserverの別の実装ではありません。実際には便利なエラー処理と再試行のメカニズムを提供します。

しかし私は統計的にあなたを推薦するために命令的プログラミング手法でRxJavaのベンチマーキングを行っていません。しかし、私はRxJavaがメカニズムをブロックすることよりも優れた性能を発揮するはずです。

4

リアクションプログラムを使用するもう1つの優れた機能は、背圧の重要な用途です。通常、パブリッシャーが消費者が処理できる情報より多くの情報を発信する状況で使用されます。

したがって、このメカニズムを使用すると、両方の間のトラフィックの流れを制御し、メモリの問題を避けることができます。

あなたがここにリアクティブプログラミングのいくつかのpracticle例を見ることができますhttps://github.com/politrons/reactive

そして背圧についてここhttps://github.com/politrons/Akka/blob/master/src/main/scala/stream/BackPressure.scala

ところでyou'reが変化するので、反応性プログラミングについての唯一の欠点は、学習曲線でありますプログラミングのパラダイム。しかし、今日、すべての重要な企業の尊重と反応性マニフェストにhttp://www.reactivemanifesto.org/

3

短所(それは時間をかけてのストリームに基づいているため)データ時代のほとんどのストリームを格納するために集中的

  • もっとメモリに従ってください。
  • スタート時に習得するのが慣習的ではないように感じるかもしれません(すべてをストリームにする必要があります)。
  • ほとんどの複雑さは、新しいサービスの宣言時に処理されなければなりません。
  • 学習するのにいい、単純なリソースが不足しています。

  • Functional Reactive Programmingと同じことがしばしば混乱します。

0

リアクティブプログラミングは、インテリジェントなルーティングとイベントの消費を伴うマイクロアーキテクチャのスタイルです。

反応が少ないということは、少ないスレッドでより多くの負荷を処理できることです。

リアクティブタイプは、リクエストやデータをより高速に処理することを目的としていません。その強みは、より多くのリクエストを同時に処理し、リモートサーバからデータを要求するなどの遅延を伴う処理を効率的に処理できることです。

より多くのリソースを消費することなく、時間と待ち時間をネイティブに処理することで、より優れたサービス品質と予測可能な容量計画を提供できます。
https://blog.redelastic.com/what-is-reactive-programming-bc9fa7f4a7fc https://spring.io/blog/2016/06/07/notes-on-reactive-programming-part-i-the-reactive-landscape https://spring.io/blog/2016/07/28/reactive-programming-with-spring-5-0-m1

から

関連する問題