Java NioとIOのどちらを選ぶべきか?質問する

Java NioとIOのどちらを選ぶべきか?質問する

ご存知のとおり、従来の IO を使用してサーバーを構築する場合、どこかでブロックする必要があるため、ループまたは 1 スレッド 1 ソケット モードを使用する必要があります。そのため、NIO の方が適していると思われます。NIO が永遠に適しているかどうかを知りたいです。

ベストアンサー1

私見ですが、ブロッキング IO は一般的に最も簡単に使用できるため、システムにさらに要求される特定の要件がない限り、最もシンプルなオプションに固執する必要があります。

次にシンプルなオプションはブロッキング NIO です。IO よりも効率性や制御性を高めたい場合によく利用します。比較的シンプルですが、ByteBuffers を使用できます。たとえば、ByteBuffers はリトルエンディアンに対応しています。

一般的な選択肢は、セレクター付きの非ブロッキングNIOを使用することです。これにより生じる複雑さの多くは、NettyやMinaなどのフレームワークで処理できます。必要非ブロッキング IO は、たとえば、サーバーごとに数千の同時接続があるためです。私見では、接続が数千ある場合、各接続が行うことが非常に些細なことである場合を除いて、サーバーを増やすことを検討する必要があります。私の知る限り、Google はサーバーごとに数千のユーザーではなく、サーバーを増やすことを目指しています。

もっと極端なオプションは、NIO2 を使用することです。これは、非ブロッキング NIO よりもさらに複雑で時間がかかります。これを適切にサポートするフレームワークは知りません。つまり、サポートすると実際に高速になります。私の知る限り、Infiniband (これがサポートされるように設計されています) がある場合はこれを使用する価値がありますが、Ethernet がある場合は使用価値がない可能性があります。

おすすめ記事