`
geeksun
  • 浏览: 965071 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

servlet3的异步特性

 
阅读更多

        Servlet3 比 Servlet2.4最大的进步应该是异步支持了,不再像过去那样,对于每个请求,只有一个线程在处理,必须等待这个线程阻塞处理完毕后,才能给 client 返回响应。

 

       使用异步处理,新开一条线程处理耗时的 task,这样线程不会一直堵塞,可以接着处理其他的client请求。

 

       此处有一误区,需要澄清的是,Servlet3的异步处理,不是指Http的异步,而是指服务器端的异步处理Http请求,由以往的一个线程阻塞处理,变成了接到请求后,把费时的IO或与DB打交道的工作,交给新的线程处理,而servlet的线程不会一直阻塞在这里。而Http客户端,仍是同步的等待服务器端的处理结果。 Servlet容器(比如Tomcat)一般会分配一个线程来处理一个来自客户端的Http请求,在这个线程发送回Http响应之前,这个线程只能属于这个HTTP请求,而不能离开这个请求,去处理其他请求。

 

       采用Servlet3.0之后,当前的线程可以开启异步处理,开启异步处理的时候会得到一个异步处理上下文对象,之后当前的线程就可以不生成HTTP响应而直接退出去处理其它的HTTP请求,其它线程可以在之后通过异步处理上下文来生成和发送那个HTTP响应。可见所谓的异步HTTP其实只是一种可以让当前的处理线程在不生成响应前就离开,而在之后再处理这个HTTP请求的机制。

 

       使用异步servlet主要原因就是因为,在service方法中业务逻辑如果碰到io操作时间比较长的操作,这样这个service方法就会长时间占用tomcat容器线程池中的线程,这样是不利于其他请求的处理的,当线程池中的线程处理任务时,任务由于长时间io操作,肯定会阻塞线程处理其他任务,引入异步servlet的目的就是将容器线程池和业务线程池分离开。在处理大io的业务操作的时候,把这个操作移动到业务线程池中进行,释放容器线程,使得容器线程处理其他任务,在业务逻辑执行完毕之后,然后在通知tomcat容器线程池来继续后面的操作,这个操作应该是把处理结果commit到客户端或者是dispatch到其他servlet上。

 

       从客户端看来,不论是哪种方式,浏览器都在发送完HTTP请求之后,都必须同步的等待服务器端的响应。假如浏览器发送完HTTP请求之后,可以在得到服务器处理结果之前转而处理其它事情,而在未来的某个时刻,当服务器处理完请求后,不需要客户端再发送请求,就可以发响应发回给浏览器,也许那才是真的异步HTTP了。但是这是违反HTTP的有请求才响应,无请求不响应的基本原则的。 HTTP长连接可以让客户端和服务器在同一个TCP连接中做多次请求响应,但是并不能改变客户端和服务器之间的同步请求响应模式。

       

       尽管Servlet3.0的异步功能不能改变HTTP的协议,在本质上让浏览器和服务器之间异步的交互,但是这一功能还是有非常大的意义的。假设接受请求和发送响应的时间分别为 Req和 Resp,每个请求都要执行一个耗时P的操作O,并且O操作会让调用者阻塞,当在P时间内有n个请求发送过来时,用传统的处理方式,由于P时间内每个线程都不能处理完,servlet容器要分配F(n) = n个线程处理请求,如下图所示:


 

       而用Servlet3.0的异步处理时,处理线程可以开启单一线程去做那个耗时P的操作,而把当前请求的异步处理上下文放入一个等待队列中,自己则接着处理其它的请求,假设这个开启异步,加入异步处理上下文的操作需要时间A,那么需要开启F(n) = n*(A+Req+Resp)/(P + Req + Resp) + 1个线程就可以在P时间内处理完所有请求。如下图所示:


 

       假如执行操作O可以不阻塞,耗时C就返回, 那么n客户端每获得一次资源,需要发送f(n) = n*P / (Req + C + Resp) 次请求,而用异步处理的时候,只需要n次请求。可见当A足够小于P时,O阻塞访问时,异步可以用更少的线程处理更多的请求;O非阻塞访问时,异步可以减少请求次数。

 

       以Web QQ为例来看看。用户发送消息时,假设服务器分发消息耗时P远远大于开启异步和把消息放到待分发队列的耗时A,那么采用异步处理发送消息,可以用更少的线程处理更多的发送消息请求。用户接受消息,假设平均P时间内用户才有新消息到达,而检查一次新消息的耗时远小于P,那么采用异步则可以减少很多客户端请求。

 

 

  • 大小: 36.1 KB
  • 大小: 36.2 KB
分享到:
评论

相关推荐

    Servlet3.0新特性,Servlet3新特性,Servlet3注解,Servlet3异步处理【蕃薯耀】

    在本篇文章中,我们将深入探讨Servlet3.0的主要新特性,包括注解、异步处理、容器初始化参数以及模块化部署等。 首先,Servlet3.0最显著的特征之一是广泛使用注解(Annotation)。传统的Servlet配置通常需要在web....

    servlet3异步请求

    Servlet3异步请求是Java Web开发中的一个重要特性,它允许开发者在处理HTTP请求时启用非阻塞模式,显著提高了Web应用程序的性能和响应能力。在Servlet 3.0规范中,这一特性被引入,使得服务器可以更有效地管理资源,...

    [转]Servlet3特征 异步Servlet

    总的来说,Servlet3的异步特性为Java Web开发带来了新的活力,让开发者能够构建更加高效和响应迅速的Web应用。通过合理利用异步处理,我们可以优化服务器资源利用,提高系统的可扩展性和性能。同时,异步Servlet也是...

    java servlet 3 异步调用 异步处理 注册监听

    在Java的Servlet 3.0版本中,引入了一项重要的特性——异步处理(Asynchronous Processing),这极大地提升了Web应用程序的性能和响应性。本文将深入探讨这一特性,以及如何利用它来实现异步调用,并注册监听器来...

    Servlet3.0 异步处理 页面推送 Comet 实例

    Servlet3.0是Java EE平台中的一个重要更新,它引入了许多新特性,其中一项重大改进就是对异步处理的支持。这项特性使得服务器可以处理长时间运行的任务,而不会阻塞其他请求,提高了系统的响应能力和效率。本实例...

    异步servlet

    异步Servlet是Java Servlet API的一个重要特性,它允许在Servlet容器中执行异步处理,显著提高了Web应用程序的性能和响应性。在传统的Servlet中,请求处理是同步的,即Servlet容器接收请求,调用Servlet的service...

    servlet 3.0 异步 推送 聊天室

    Servlet 3.0引入了一种全新的特性,即异步处理能力,这极大地提高了Web应用程序的性能和响应性,尤其是在处理长时间运行的任务时。在传统的Servlet中,请求处理线程会一直占用,直到整个请求生命周期结束,这可能...

    Servlet3.0 新特性

    一个显著的新特性是支持异步Servlet。通过实现`AsyncContext`接口,Servlet可以将控制权交还给容器,然后在后台执行长时间运行的任务,而不会阻塞HTTP线程。这提高了系统的并发性能,特别是在处理I/O密集型任务时。...

    ORACLE官方培训servlet-3新特性中文版

    ### ORACLE官方培训servlet-3新特性中文版 #### 一、概述 在Web开发领域,Servlet技术作为Java EE平台的重要组成部分,一直扮演着核心角色。Servlet 3.0作为Servlet规范的一个重要版本,引入了许多增强功能和新...

    Spring+ajax+servlet异步完成登录名是否存在

    本文将深入探讨如何使用Spring、Ajax和Servlet实现登录名存在的异步检查,从而在用户输入时实时验证用户名是否已被占用,避免用户等待服务器返回完整的登录页面。我们首先会介绍相关技术的基本概念,然后逐步解析...

    Servlet 3.0新特性——文件上传接口

    5. **异步处理**:Servlet 3.0引入了异步处理能力,可以用于文件上传场景。当文件较大时,可以启动一个新的线程或使用ExecutorService来处理上传,从而避免阻塞主线程,提升响应速度。 6. **安全性增强**:Servlet ...

    Servlet3.0特性详解

    Servlet3.0是Java EE平台中的一个重要组成部分,它在Servlet2.5的基础上引入了许多新特性,极大地提高了开发效率和灵活性。以下是对Servlet3.0主要特性的详细解释: 1. **注解配置**: 在Servlet3.0中,我们可以...

    Servlet3.0 新特性之模块化实践

    总结,Servlet 3.0的新特性显著提升了Web应用的开发效率和性能,通过模块化、注解、异步处理、可插拔容器、依赖注入和过滤器链改进等手段,提供了更加现代、灵活和高效的开发体验。对于开发者来说,理解和掌握这些...

    正在研究servlet3的朋友们,有谁需要servlet3 api(英文版)的吗, 见附件

    Servlet3是Java Web开发中的一个重要里程碑,它在Servlet2.5的基础上引入了许多新特性,提升了Web应用程序的灵活性和可扩展性。这篇博文分享了Servlet3的API英文版资源,对于学习和理解Servlet3规范有着重要的参考...

    Servlet3-sources-code

    这个压缩包中的`servlet-3-sources-code`提供了Servlet3的源码,你可以通过阅读这些代码来深入理解Servlet的工作原理,了解其内部是如何处理请求和响应的,以及如何实现上述特性。这对于学习和优化Web应用性能,以及...

    Servlet3.0新特性解析01

    总结来说,Servlet3.0的新特性带来了更简洁的配置、更高效的异步处理、更灵活的过滤器和监听器注册,以及对文件上传的内置支持。这些改进都极大地推动了Java Web应用的开发效率和性能,使得开发人员能够更加专注于...

    servlet 3.0新增功能详解

    本文将详细介绍 Servlet 3.0 的关键新特性,包括异步处理、新增的注解支持以及可插性支持等方面。 #### 异步处理支持 异步处理是 Servlet 3.0 中最为显著的新特性之一。这一特性解决了传统 Servlet 在处理长时间...

    Servlet3.1规范(最终版)

    3. 可选URL路径:`@WebServlet`的`urlPatterns`属性可以接受多个值,表示Servlet可以处理多种不同的URL路径。 四、安全改进 Servlet3.1规范加强了安全方面的功能,如支持HTTP Strict Transport Security(HSTS)和...

    servlet3 api 文档

    Servlet3 API文档是Java Web开发领域中的重要参考资料,它详细阐述了Servlet的相关接口、类以及方法,为开发者提供了全面的指南。Servlet技术是用于构建动态Web应用程序的核心组件,它允许服务器端处理HTTP请求并...

Global site tag (gtag.js) - Google Analytics