1. ホーム
  2. tomcat

[解決済み] TomcatにおけるNIOとBIOの根本的な違いは何ですか?

2022-01-30 21:07:11

質問

TomcatでNIOコネクタを設定した場合、N個のプーラースレッドとM個のワーカスレッドがあります。

BIOコネクタを設定すると、スレッドプールにN*M個のスレッドを持つことができます。では、2つのコネクタの違いは何でしょうか?

解決方法は?

BIO では、各新規接続に Connector スレッド プールからスレッドが割り当てられ、そのスレッドは接続が閉じるまでその接続に割り当てられたままとなります。つまり、スレッドはリクエストの間(つまり HTTP キープアライブの間)、長時間アイドル状態です。

NIOでは、新しい接続はすべてPollerに渡されます。Pollerのスレッドは、処理すべきデータが接続されたときに通知されます。Poller は Connector スレッドプールから接続にスレッドを割り当て、そのスレッドはすべてのデータの読み取り/書き込みが完了するまで、その接続に割り当てられたままになります。その後、接続は Poller に戻され、Poller はさらにデータを監視できるようになります。

要するに、これによってNIOはよりスケーラブルになったということです。BIOでは、接続ごとにスレッドプールに1つのスレッドが必要です。NIOはBIOよりも多くの接続を維持することができ、同時に処理される各リクエストに対してスレッドプールに1つのスレッドを必要とするだけです。