我在这里阅读了新的 springframework 3.2 功能,Servlet 3 Async 支持:
http://blog.springsource.org/2012/05/07/spring-mvc-3-2-preview-introducing-servlet-3-async-support
我有一个问题。
博客文章指出spring现在支持:
- 控制器返回一个 Callable
- 可调用对象在后台线程 (
TaskExecutor
)中调用 - 响应保持打开状态 (
request.startAsync()
)。
声明的动机是避免占用所有 Web 容器线程。不过,我的理解是这样的:
- Web 容器线程池是可调的。
- 该线程池有一个硬性限制,因为最好降低服务质量,而不是通过耗尽所有资源来降低进程(例如,无界线程池和足够多的请求会发生)。
- servlet-3/comet 的重点是限制打开线程的数量,同时不限制与 Web 服务器的打开连接数量(因为线程很昂贵,而套接字很便宜)
因此,鉴于此,Spring 提出的功能对我来说意义不大。他们不只是在容器的有界池之上破解一个无界线程池吗?这不会错过限制线程数的要点吗?