因为支持Servlet 3.0 asynchronous processing。总是使用异步处理会不会更好呢?或者在什么情况下同步处理更好?
发布于 2010-01-29 23:21:39
异步servlet带来的最大好处是HTTP push,服务器可以在客户端选择时将信息发回给客户端,而不是在客户端请求信息时。在异步servlet之前,这将需要长时间运行的HTTP连接,每个连接都绑定了一个服务器线程,这是非常低效的。这个新模型将服务器端处理与连接处理解耦。
发布于 2010-01-29 23:19:48
阅读本文时,Servlet 3.0规范中的异步处理支持有一个非常具体的用例-它设计用于处理这样的情况: AJAX应用程序发出的请求可能会在后台触发长时间运行的进程。
我们需要这样的东西的原因是为了响应每请求线程模型中的一个问题,该模型在每次客户端从服务器请求页面时分配一个线程,而不是为客户端的整个会话分配单个线程。在AJAX出现之前,当客户端偶尔发出请求时,这种方法效果很好,但是当AJAX应用程序显著增加客户端发出的请求数量时,就失去了这个好处。
具体地说,如果一个AJAX请求触发了一些潜在的缓慢或阻塞事件,比如数据库操作,我们又回到了开始的地方--服务器线程池中的线程可能处于空闲状态。
异步处理支持试图通过将请求放入集中队列来缓解这种情况,这样线程就不会总是等待可能尚未开始处理的请求的结果。简而言之,我们试图让我们的线程在任何时候都能最大限度地发挥作用--也就是减少线程空闲的时间(但也可以服务于其他连接)。
像任何新的开发一样,这不是一个万能的工具。在您的应用程序中查找合适的特定案例。
发布于 2010-01-29 23:17:40
对于在整个请求处理周期中不需要持有线程的情况,引入了异步处理。这种情况的典型示例是comet-like功能。
在所有情况下使用异步处理都没有任何价值,因为通常后端处理无论如何都会消耗一个线程。
https://stackoverflow.com/questions/2162783
复制相似问题