ホームページ  >  記事  >  Java  >  Java Reactor リアクター パターン

Java Reactor リアクター パターン

Guanhui
Guanhui転載
2020-06-24 18:09:432044ブラウズ

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 までご連絡ください。