2016-07-13 3 views
3

ちょうど最近、NIOについて学びました。私が理解したところでは、NIOの主な利点は、NIOのノンブロッキング機能により、1つ(または少数)のスレッドで多くの接続を処理できることです。しかし、Executorsを使ってこの目標を達成することはできませんし、ワーカースレッドのリストを持つことはできませんか?Java executorの代わりにNIO(またはnettyのようなフレームワーク)を使用するのはなぜですか?

NIOのエグゼクティブよりも利点はありません。代わりに、私はエグゼキュータはNIOを使うよりも読みやすく、読みやすくするためにreadLin()を呼び出すだけですが、NIOではメッセージが部分的であるかバッファにいくつかのメッセージがあるかどうかチェックする必要があります。

エグゼキュータの実行機能を呼び出すノンブロッキング機能もありますが、基本的にはバッファへの接続を追加し、スレッドの固定数が空きになるのを待っています。

なぜ、エグゼキュータを使用する代わりにNIOを使用するのですか?あなたは、スケーラビリティの問題が発生するまで

+1

あなたは、単一のスレッドで複数のブロッキングソケットを扱うことができません。 'Executor 'の後ろに隠れてもそれは変わりません。 – EJP

+0

受信したソケットごとにexecutorのexecuteメソッドを呼び出し、スレッドが1つしかないexecutorを持つ場合、このスレッドはこれらのソケットを1つずつ処理します。私が間違っている? –

+0

はい。発行した最初の読書をブロックします。 – EJP

答えて

0

マルチスレッドは、NIOの速さ(あるいはより速い)である

感謝。スレッド数が多すぎるとNIOよりパフォーマンスが低下します。

しかし、いくつかのケースでは、IOを遮断するマルチスレッドは、まだNIOよりも優れていると言われました:http://paultyma.blogspot.com/2008/03/writing-java-multithreaded-servers.html

+0

これは実際に彼が尋ねたことではありません。彼は固定数のスレッドを持つexecutorとNIOについて尋ねました。彼のコメントでは、彼は不思議に1の固定サイズを使用しました。 – EJP

+0

あなたは彼の提案を考えています。彼の質問のタイトルについては、私はそれがまだ関連していると思う。ご意見ありがとうございました。ここでは、接続ごとにスレッドを作成する方法について説明しています。 –

関連する問題