2016-07-19 5 views
1

サーバ側から見れば、NIOの利点は、IO接続をブロックする1つのスレッドと比較して、より少ないスレッドで複数のネットワーク接続を管理できることです。クライアント側でnetty4 NIOを使用しているbenifitと、1つのスレッドごとのスレッド・ブロックIOとの比較は何ですか?

しかし、同時に1000台のサーバーに接続するIOクライアントを使用している場合、これらの接続IOをより少ないスレッドで管理する同様の方法がありますか。私はNetty 4 multiple clientでアプローチを試み、それが作成した各チャンネルの "リーダー"スレッドを生成することがわかった。

だから、私の質問は以下のとおりです。

1)クライアント側でネッティー/ NIOを使用してのメリットは何ですか? 2)クライアント側のスレッド数を減らして複数の接続を管理することは可能ですか?

ありがとうございます!

私はgithubののコードサンプルをアップロードした:https://github.com/hippoz/ogop-lseb

サンプルサーバ/クライアントクラスはmoc.ogop.ahsp.demo.nio.MultipleConnectionNioMainとmoc.ogop.ahsp.demo.nio.NettyNioServerMain

です
+0

なし、あなたはいつもではないアウトバウンド多数の接続を有することを計画している場合を除き。 – EJP

+0

はい、実際には、各クライアント/サーバー間で永続的な接続を使用しています。各クライアントは同時に約1000台のサーバーに接続する可能性があります。 –

+0

その場合(「永続的接続」のままではありません)、かなり複雑なコーディングを犠牲にしてスレッドを節約することができます。最初に 'java.net'を使って作業し、スケーラビリティの問題があるかどうかを確認します。 – EJP

答えて

0

多くのスレッドを持つと、カーネルがコア全体のスレッドを再スケジュールしようとすると、より多くのメモリが各コアからロードされたりアンロードされたりするコンテキストスイッチ問題が発生します。

NIOの利点はパフォーマンスです。それが私たちが使う唯一の理由です。ブロッキングIOの使用はもっと簡単です。ワーカーモデルとNIOを使用すると、プロセスが使用するスレッド数(および計算時間)を制限することができます。したがって、2人の従業員がいて、100%のCPU時間を使用している場合は、2〜4台のコアを使用できるため、システム全体がクロールされません。

楽しくお楽しみください!

関連する問題