MinecraftやJIrcsのようないくつかのアプリケーションソースでは、どちらもjava.ioを使用してReactorプラグインを実装しています(私が間違っていない場合)。また、この記事にもあります。では、Reactor Patternを実装するときのjava.ioとjava.nioの違いは何ですか?つまり、パフォーマンスの利点、プロセス効率など、java.ioがReactor Patternを実装するための優れたソリューションであると思われる場合は、優れたチュートリアルを取得できます(googleは、必要に応じてjava.ioではなく大量のjava.nio tutsを提供してくれるため)
3 に答える
NIOの方が速いというのは本当ではありません。ポール・ティーマはいつかその神話を取り壊しました。
http://mailinator.blogspot.in/2008/02/kill-myth-please-nio-is-not-faster-than.html
http://paultyma.blogspot.in/2008/03/writing-java-multithreaded-servers.html
お役に立てば幸いです。
42ページの本から抜粋した以下の情報で結論を出していただければ幸いです。
java.io. *クラスは、デコレータデザインパターンを使用します。デコレータデザインパターンは、実行時にオブジェクトに責任を負わせます。デコレータは、継承がコンパイル時にクラスに責任を付加するため、継承よりも柔軟性があり ます。java.io. *クラスは、デコレータパターンを使用して、いくつかの基本的なクラスに基づいて、実行時に動作のさまざまな組み合わせを構築します。
および43。
Javaは、多くのI/O操作を実行するプログラムの開発にはもはや適していません。さらに、ファイルロック、非ブロッキング、非同期I / O操作、ファイルをメモリにマップする機能など、一般的に必要なタスクは利用できませんでした。ノンブロッキングI/O操作は、マルチスレッドやJNIの使用などの回避策によって実現されました。新しいI/O API(別名NIO))J2SE 1/4では、この状況が変更されました。複数のクライアント要求を処理するサーバーの可用性は、サーバーがI/Oストリームをどのように使用するかに効果的に依存します。サーバーが数百のクライアントを同時に処理する必要がある場合、I / Oサービスを同時に使用できる必要があります。Javaでこのシナリオに対応する1つの方法は、スレッドを使用することですが、スレッドの比率はほぼ1対1です(100クライアント)。 100スレッドになる)は、スレッドのオーバーヘッドが非常に大きくなる傾向があり、メモリスタックの消費(つまり、各スレッドにスタックがある、JavaセクションのQ34、 Q42を参照)およびCPUコンテキストの切り替えにより、パフォーマンスとスケーラビリティの問題が発生する可能性があります(つまり、実際の計算を行うのではなく、スレッドを切り替える)。この問題を克服するために、非ブロッキングI/Oクラスの新しいセットがjava.nioパッケージのJavaプラットフォームに導入されました。ノンブロッキングI/Oメカニズムは、セレクターとチャネルを中心に構築されています。チャネル、 バッファ、セレクターはNIOの中核です。
と続きを読む。JavaIOとJavaNIOを提供するいくつかのリファレンスリンクを次に示します。JavaIO はNIOよりも高速です–古いものは再び新しいものです!、 JavaIOとJavaNIOおよびIOとNIO–割り込み、タイムアウト、およびバッファ。
ブロッキングI/Oと非ブロッキングI/Oの違いを理解することが重要です。このjava.io
パッケージはノンブロッキングI/Oをサポートしていないため、多数の接続に対応できません。さらに、I / Oをブロックすると、低遅延システムにはまったく適さない、ひどい1クライアントから1スレッドへのモデルにしか頼ることができません。リアクターパターンを実装する非同期ネットワークI/Oライブラリについて私が書いたこの記事をご覧になることをお勧めします。これにより、高性能システムでノンブロッキングがどのように重要な役割を果たすかを理解できます。