私はそれが繰り返される質問であることを知っており、次のような記事を読んだことがあります http://www.mailinator.com/tymaPaulMultithreaded.pdf nio が io よりも優れているとは限りません。
しかし、従来のアクセプター/ワーカー スレッド アーキテクチャよりも Web サーバーを開発する際に、どのように Java nio をより適切にスケーリングできるかを理解するのに苦労しています。説明させてください:
通常、Java Web サーバーは次のパターンを使用して接続を処理します。
ServerSocket の accept() メソッドで、コア数に制限されたいくつかのアクセプター スレッドがブロックされます。
while (true) { socket = serverSocket.accept(); // handleRequest submits the socket to a queue handleRequest(socket); socket.close(); }
クライアント ソケットが取得されると、非ブロッキング キューに送信され、ワーカー スレッドのプールからワーカー スレッドによって処理されます。実行中の io 操作の期間に応じたワーカー スレッドの数。
java.nio を使用すると、このアーキテクチャがよりスケーラブルになりますか?
つまり、ブロッキング操作 (データベースまたはファイルシステムへのアクセス、外部サービスの呼び出し) を行うリクエストを処理するために、ワーカー スレッドが必要になるということです。バックエンド操作が node.js のように非同期で実行されない場合でも、1 つまたは 2 つのイベント ディスパッチャー スレッドに対して全体的なスケーラビリティを制限する作業スレッドが必要になります。