Java Reactor リアクター パターン

Guanhui
リリース: 2020-06-24 18:09:43
転載
2048 人が閲覧しました

Java Reactor リアクター パターン

#Reactor Reactor パターン

これまでのところ、高性能ネットワーク プログラミングでは反応を避けることはできません。 。 Nginx、Redis、Netty など、多くの有名なサーバー ソフトウェアやミドルウェアは、リアクター モードに基づいて実装されています。

リアクター パターンは、高性能ネットワーク プログラミングのために必ず知っておくべきパターンです。

Reactor の概要

リアクター モードは、2 つの主要な役割で構成されます: Reactor リアクター スレッドとハンドラー プロセッサー:

(1) Reactorリアクター スレッドの責任: IO イベントに応答し、それらをハンドラー プロセッサーに配布する責任があります。

(2) ハンドラー プロセッサの責任: ビジネス処理ロジックのノンブロッキング実行。

上記のリアクター モードの定義から、このモードには魔法のようなものは何も見えません。もちろん、リアクター パターンには、単純なものから複雑なものまで、さまざまなバージョンがあります。前の定義によれば、これは最も単純なバージョンにすぎません。

マルチスレッド OIO の致命的な欠陥

Java OIO プログラミングでは、最初の最も原始的なネットワーク サーバー プログラムは while ループを使用してポートを継続的に監視します。新しいつながりのために。存在する場合は、処理関数を呼び出して完了します。サンプル コードは次のとおりです:

@Test
 public void client() throws IOException {
   Socket client = new Socket("127.0.0.1", 9999);
   Writer writer = new OutputStreamWriter(client.getOutputStream());
   writer.write("Hello World");
   writer.flush();
   writer.close();
   client.close();
 }
 
 @Test
 public void server() throws IOException {
   ServerSocket server = new ServerSocket(9999);
   while (true){
     Socket socket = server.accept();
     Reader reader = new InputStreamReader(socket.getInputStream());
     print(reader);
     reader.close();
     socket.close();
     server.close();
   }
 }
ログイン後にコピー

このメソッドの最大の問題は、前のネットワーク接続のハンドル (ソケット) が処理されていない場合、後続の接続リクエストを受信できないため、後続のすべてのリクエストがブロックされ、サーバーのスループットが低下します。サーバーにとって、これは深刻な問題です。

推奨チュートリアル: 「

Java

以上がJava Reactor リアクター パターンの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:jb51.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!