ちょうど最近、NIOについて学びました。私が理解したところでは、NIOの主な利点は、NIOのノンブロッキング機能により、1つ(または少数)のスレッドで多くの接続を処理できることです。しかし、Executorsを使ってこの目標を達成することはできませんし、ワーカースレッドのリストを持つことはできませんか?Java executorの代わりにNIO(またはnettyのようなフレームワーク)を使用するのはなぜですか?
NIOのエグゼクティブよりも利点はありません。代わりに、私はエグゼキュータはNIOを使うよりも読みやすく、読みやすくするためにreadLin()を呼び出すだけですが、NIOではメッセージが部分的であるかバッファにいくつかのメッセージがあるかどうかチェックする必要があります。
エグゼキュータの実行機能を呼び出すノンブロッキング機能もありますが、基本的にはバッファへの接続を追加し、スレッドの固定数が空きになるのを待っています。
なぜ、エグゼキュータを使用する代わりにNIOを使用するのですか?あなたは、スケーラビリティの問題が発生するまで
あなたは、単一のスレッドで複数のブロッキングソケットを扱うことができません。 'Executor 'の後ろに隠れてもそれは変わりません。 – EJP
受信したソケットごとにexecutorのexecuteメソッドを呼び出し、スレッドが1つしかないexecutorを持つ場合、このスレッドはこれらのソケットを1つずつ処理します。私が間違っている? –
はい。発行した最初の読書をブロックします。 – EJP