异步 Servlet 与同步 Servlet

2022-09-01 12:37:55

由于支持 Servlet 3.0 异步处理。使用始终异步处理会更好吗?或者,在什么情况下同步处理更好?


答案 1

异步 servlet 的最大好处是 HTTP 推送,服务器可以在选择时将信息回传给客户端,而不是在客户端请求信息时。在asynch之前的servlets中,这将需要长时间运行的HTTP连接,每个连接都捆绑了一个服务器线程,这是非常低效的。此新模型将服务器端处理与连接处理分离。


答案 2

阅读本文,Servlet 3.0 规范中的异步处理支持有一个非常具体的用例 - 它旨在处理 AJAX 应用程序发出的请求,这些请求在后台触发可能长时间运行的进程。

我们需要这样的东西的原因是响应每个请求线程模型中的问题,该模型在每次客户端从服务器请求页面时分配一个线程,而不是为客户端的整个会话分配单个线程。这在 AJAX 之前运行良好,当时客户端会偶尔发出请求,但是当 AJAX 应用程序显著增加客户端发出的请求数时,好处就丢失了。

具体来说,如果 AJAX 请求触发了可能缓慢或阻塞的内容,例如数据库操作,我们将返回到开始的位置 - 来自服务器线程池的线程可能处于空闲状态。

异步处理支持尝试通过将请求放入集中式队列来缓解这种情况,这样线程就不会总是卡住等待可能尚未开始处理的请求的结果。简而言之,我们正试图始终从线程中获取最大的收益 - 也就是说,减少它们空闲时的时间(但可能为其他连接提供服务)。

像任何新的发展一样,这不是一个一刀切的工具。在适当的应用程序中查找特定情况。


推荐