応答プログラミング技術概要

反応プログラムは、非同期データストリームの使用がプログラムされている本質的に観察者(観察)モードの形態です。私たちは、最初の非同期動作を達成するには、いくつかの一般的な方法、および主流の反応性プログラミング技術の実現へ、その後リードを議論します。

1.非同期実装するための一般的な方法

Javaでは、非同期の非ブロッキングを達成するために、典型的には、これら二つの機構のコールバック(コールバック)および未来を使用するが、両方のメカニズムはいくつかの制限があります。

(1)コールバック

下に示すコールバックの意味、すなわちクラスmethodA()methodBメソッドがクラスB()メソッドA、B、およびクラスmethodB()は、方法は、完成アクティブクラスAコールバック()メソッドで呼び出しを呼び出します。コールバックは、双方向の呼び出しで具体化されます。

コールバックは、任意の閉塞を引き起こすことはありませんタスク実行過程で見ることができ、作業の準備ができたら、その結果は、コールバックが実行されます。しかし、我々はまた、コールバックメカニズムを使用している場合、コードが不連続プロセスで、その結果、クラスメソッドから別のクラスのメソッドにジャンプするはずです。単層の非同期実行のために、コールバックを使用するのは簡単です。しかし、ネストされた非同期のマルチレイヤの組み合わせのために、それは非常に不器用であること。すぐに理解し、そのフォームには、いわゆる「地獄のコールバック(コールバック地獄)」の問題を維持することが困難コードにつながるので、組み合わせて大規模なプルバックすることは困難です。

(2)今後の

今後のモデルは、単純なシナリオとして理解することができます。私たちは、希望のタスク処理を持ち、そして将来への課題を提出し、今後は一定の時間内に、このタスクを完了し、この時間の間に、我々は他の操作を行うことができます事。今後は、実装モードとして、Javaの将来のインタフェースは、以下の5つのメソッドが含まれています。

パブリック インターフェイスフューチャー<V> {

    ブール(キャンセルブール mayInterruptIfRunning )。

    ブール isCancelled()。

    ブール isDone()。

    VのGET()はスロー例外:InterruptedException、ExecutionExceptionを。

    VのGET(長いタイムアウト、TimeUnitでユニット)?

    スロー例外:InterruptedException、ExecutionException、TimeoutExceptionは、

}

 

将来インターフェイス()メソッドは、タスクの実行をキャンセルするために使用されるキャンセル;タスクがキャンセルされたか否かを決定するためのisCancelled()メソッドは、2 get()メソッドは、タスクの実行の終了を待ってから結果を得るであろう、違いはタイムアウトが設定できるかどうかです。最後isDone()メソッドは、タスクが完了したか否かを判断します。

今後の需要が非同期的な結果を得る実装することができ、それが通知メカニズムを提供していませんが将来は完了したときに、私たちは知りません。そのため消費のCPUリソース、または使用isDone()は、将来のポーリングを決定する方法が終了し、結果を得るために、我々は2またはブロック()メソッドが返す実装時刻同期と同等の結果を今後、待つことを得ます。だから、単純な単一層のための今後の呼び出しは、ネストされた非同期呼び出しのために、また、複雑なサービスのリンクの建物に適した非常に重いではありません。

今後の機構の欠点を考えると、Javaの8はCompletableFutureメカニズムを導入しました。ある程度CompletableFutureの共通の未来の欠点を補うために。非同期タスクが完了した後、我々はタスクを使用する場合の結果を待つ必要はありません。直接そのような以前の結果は、非同期イベント処理を処理するために別のスレッドを非同期に処理としてthenAccept()、thenApply()、thenCompose()メソッドを介し。

CompletableFutureは非常に強力な将来の拡張機能を提供し、我々は非同期プログラミングの複雑さを簡素化し、関数型プログラミングの機能を提供することができ、その結果、補正、変換の方法によって処理してもCompletableFutureを提供するさまざまな組み合わせを提供していますすることができます方法。

関係するルーチン開発作業のために、我々は簡単なタスクを扱っている時間のほとんどは、CompletableFutureを使用して、この時間は本当に需要を満たします。システムがより複雑であるか、我々は自分自身を対処する必要があり、非常に複雑なタスクであるときしかし、複数のプロセスの組み合わせのためのCompletableFutureはまだ容易ではありません。複数の利用CompletableFuture未来を手配することは容易で可能ですが、ありません。私たちは、コードは本当に問題ありません書き出すかどうかを心配しますが、時間をかけて、これらのコードは、ますます複雑化し、維持することは困難になるだろう。この目的のために、我々は将来的には、コードを維持するために簡単に非同期処理をサポートするために、これらの技術やフレームワークの関連技術とフレームワークの反応プログラミングを導入する必要があります。

2.主流の反応性のプログラミング技術を達成するために

現在、主流の反応性のプログラミング実装テクニックはそうでRxJava、アッカストリーム、Vert.xプロジェクト炉とが含まれます。

(1)RxJava

反応性拡張機能(Rx)が最初にMicrosoftの.NETプラットフォームで使用される観測可能なイベント(観測可能な)シーケンス駆動型プログラミングに基づいて、非同期組み込んクラスライブラリです。RxJavaが観察/フロアブルシリアル非同期とイベントベースのライブラリを用いて構成するための反応性拡張のJava実装で、達成バージョン1.xの二組と2.xバージョンが存在します。

変換およびインタフェース応答ストリームが、しかしので基本的な実装の、フロー仕様の前に生まれた応答RxJava 1.xのバージョンでは、使用することは非常に直感的ではありません。既存の仕様との統合の設計と実装でRxJava 2の考慮事項は、インターフェイス上のフロー仕様に従って応答に書き直され、および背圧バージョンの機能が析出1.X。しかし、RxJava 1.1バージョンとの互換性を維持するために、RxJava 2は、それが直感的でない多くの場所で使用します。RxJavaについての詳細は、公式ウェブサイト(を参照してもよいhttp://reactivex.io/)。

(2)アッカストリーム

JVM上のアッカランは、キットは、高い並行性と高い弾性分散メッセージ駆動型アプリケーションで構成されています。俳優は、コアコンセプトアッカあり、それは状態と振る舞いをカプセル化するオブジェクトで、俳優の間でメッセージの交換を介して通信することができます。俳優簡素化、ロックおよびスレッド管理することで、あなたは非常に簡単に並列と並行プログラムの適切なシステムを開発することができます。

アッカはまた、応答の初期フロー仕様の部材であり、アッカアッカストリームの流れを応答達成基づいて、アッカ既存のロールモデルのより高いレベルの上に抽象化を提供し、応答背圧をサポートメカニズム。

(3)Vert.x

Vert.xは、Eclipse Foundationの下で、オープンソースのJavaツールである、非常に同時、非同期、スケーラブルな、Webアプリケーション、マルチ言語サポートをビルドするための非同期Webアプリケーション開発フレームワークです。Vert.xは非ブロックメカニズムを達成するために、イベント駆動型アーキテクチャに基づいて、Vert.xのタスクを応答システム設計を構築することです。

Vert.xは、工具マガジンは、応答フロー仕様vert.x実現に設けられており、Vert.x反応ストリーム工具マガジンが含まれています。私たちは、パブリッシャとサブスクライバの応答フロー仕様を処理Vert.x読み書き可能なストリームを介して流れを提供することができます。

(4)プロジェクトリアクター

春5機構の統合された実施体制等の反応性のプログラミングメカニズム、デフォルトスプリング5プロジェクトの原子炉を導入しました。後半の原子炉の誕生は、第二世代応答の開発フレームワークとみなすことができます。だから、完全に応答フローツールライブラリの設計と実装に基づいて仕様使用中、無RxJavaという歴史的な荷物の種類、より直感的です。しかし、APIの設計と表現形式は、原子炉とRxJavaは、私たちが応答フロー仕様に基づいて原子炉を言うことができる、などと同様に比較するが、可能な限りAPIの用語としてRxJavaに近づくために。

モノフラックス炉心コンポーネントは、0からnまでの要素を含む2つの代表的なフラックス非同期配列であり、および非同期シリアルモノ0または要素を示し含みます。

 

建築家のプログラマの移行:あなたは記事に興味があるなら、私は、マイクロチャネル公共数に焦点を当てることができます。

、「技術管理者への移行:ソフトウェア業界全体の開発、技術、思考と実践管理の変革」と「マイクロサービスアーキテクチャと設計原則」:私は「建築家の道へのプログラマの変換システムアーキテクチャ設計」を公表しました「マイクロサービスアーキテクチャの戦闘」や他の書籍、翻訳「深いのRabbitMQ」と「Spring5反応プログラミング戦闘は」、交換を歓迎しました。

公開された92元の記事 ウォンの賞賛9 ビュー110 000 +

おすすめ

転載: blog.csdn.net/lantian08251/article/details/101520622