JavaでのBIO、NIO、AIOの相違点とアプリケーションシナリオ

 IOを学ぶには、まず4つのことを理解する必要があります。

1.同期

           Javaはio自体を処理します。

2.非同期

         Javaはioをオペレーティングシステムに渡して処理し、バッファ領域のサイズを通知して、処理コールバックを完了します。

3.ブロック

         ブロッキングIOを使用する場合、Java呼び出しは、戻る前に読み取りと書き込みが完了するまでブロックします。

4.ノンブロッキング

       非ブロッキングIOを使用しているときに、すぐに読み書きできない場合、Java呼び出しはすぐに戻ります。IOイベントディスパッチャーが読み取りと書き込みが可能であることを通知すると、読み取りと書き込みが行われ、読み取りと書き込みが完了するまでループし続けます。

 

1.BIO:同期とブロッキング。サーバーの実装モードは1つのスレッドを接続することです。このモードの明らかな欠点の1つは、クライアント接続の数がサーバースレッドの数に比例するため、不要なスレッドオーバーヘッドが発生し、深刻になる可能性があります。また、サーバーのメモリがオーバーフローします。もちろん、この状況はスレッドプールメカニズムによって改善できますが、本質的にこの欠点を排除するものではありません。

2.NIO:JDK1.4以前は、JavaのIOモデルはBIOでしたが、JDKから導入された新しいIOモデルNIOであるJDK1.4以降は、同期非ブロッキングです。サーバーの実装モードは、1つのスレッドに対する複数の要求です。つまり、要求はマルチプレクサーセレクターに登録され、マルチプレクサーは、IO要求をポーリングするときにスレッドを開始して処理します。

3. AIO:JDK1.7はNIO2.0をリリースしました。これは真に非同期で非ブロッキングです。サーバーの実装モードは、1つのスレッドに対する複数の有効な要求です。クライアントのIO要求は最初にOSによって完了され、次にサーバーアプリケーションに通知されます。スレッド処理を開始します(コールバック)。

アプリケーションシナリオ:BIOは、同時接続の数が多くない場合に使用されます。これは、プログラミングとデバッグが非常に簡単であるためですが、同時実行性が高い場合は、NIOまたはAIOを選択する必要があります。成熟したネットワーク通信フレームワークNettyを使用することをお勧めします

おすすめ

転載: www.cnblogs.com/bill89/p/12684731.html