NIO とコメットはまったく無関係です。それらを組み合わせて使用できます。
NIO (または APR) コネクタを使用すると、スレッド モデルにより、より少ないスレッドでより多くのリクエストを処理できます。コネクタ間の比較については、http://tomcat.apache.org/tomcat-7.0-doc/config/http.html#Connector_Comparisonを参照してください。
Comet (および Websocket) には、まったく異なるディスパッチ モデルがあり、異なるアプリケーション アーキテクチャを必要とし、異なる方法でより高いスループットを実現します。
あなたが質問で提示するシナリオは、典型的なリクエストごとに 1 つのスレッドをブロックするモデルです。ステップ 4 では、Java BIO コネクタ (Tomcat 7 までのデフォルト) は、既存のコネクタで追加のリクエスト (キープアライブ HTTP リクエスト) を待ち続けます。クライアントがConnection:close
前の要求を設定せず、接続を閉じない場合、スレッドはキープアライブ タイムアウトに達するまでハングします。NIO コネクタを使用すると、応答が送信された直後にスレッドがスレッド プールに戻され、到着しない可能性のあるキープアライブ リクエストでスレッドが「無駄」になることはありません。
Comet/Websocket は、特別に作成されたサーブレット (およびオプションのフィルター) にメッセージを配信することにより、まったく異なる動作をします。スレッドは、送信するメッセージまたは書き込むデータがある場合にのみ使用されます。
更新 2016-08-19
Tomcat 8.5 および 9.0 では、BIO コネクタが完全に削除されました。これは、新しい API とテクノロジ (Websocket など) の多くがノンブロッキング セマンティクスを必要とし、ブロッキング API の上にノンブロッキング サービスを構築することが非常に難しいためです。ジョブを完了するために必要なコードは、Tomcat コードの残りの部分を非常に見苦しくしていました。そのため、BIO コネクタを完全に削除する決定が下されました。そのため、Tomcat 8.5 以降では、NIO、NIO2、および APR ベースのコネクタのみが利用可能です。
また、Tomcat 8.5 および 9.0 では、Cometのサポートが廃止されたことに注意してください。Comet の使用はすべて、より標準的なプロトコルである Websocket に置き換える必要があります。