私は新しい springframework 3.2 機能、サーブレット 3 非同期サポートについて読んでいました。
http://blog.springsource.org/2012/05/07/spring-mvc-3-2-preview-introducing-servlet-3-async-support
そして質問があります。
ブログ記事は、Spring が以下をサポートするようになったことを示しています。
- Callable を返すコントローラー
- callable はバックグラウンド スレッドで呼び出されます (
TaskExecutor
) - 応答はオープンのままです (
request.startAsync()
)。
述べられている動機は、すべての Web コンテナー スレッドを消費しないようにすることです。ただし、私の理解は次のとおりです。
- Web コンテナのスレッド プールは調整可能です。
- そのスレッド プールにはハード リミットがあります。これは、すべてのリソースを使い果たしてプロセスをダウンさせるよりも、サービスを低下させる方が望ましいためです (たとえば、無制限のスレッド プールと十分な数のリクエストで発生するように)。
- servlet-3/comet のポイントは、Web サーバーへの開いている接続の数を制限せずに、開いているスレッドの数を制限することです (スレッドは高価で、ソケットは安価であるため)。
したがって、Spring が提案している機能は、私にはほとんど意味がありません。コンテナーの境界付きプールの上にある無制限のスレッド プールをハッキングしているだけではありませんか? それはスレッド数を制限するという点を見逃していませんか?