`
geeksun
  • 浏览: 953807 次
  • 性别: 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异步处理【蕃薯耀】

    NULL 博文链接:https://fanshuyao.iteye.com/blog/1688318

    Servlet3.1规范(最终版)

    这个是Servlet最新版本API的翻译版本,最大的改变是新增了异步Servlet,希望共同学习!

    Servlet3.0

    Servlet3.0新特性解析_02_Servlet3.0的异步支持与反向Ajax深入详解Servlet3.0新特性解析_02_Servlet3.0的异步支持与反向Ajax深入详解

    servlet 3.0新增功能详解

    Servlet 是 Java EE 规范体系的重要组成部分,也是 Java 开发人员必须具备的基础...本文主要介绍了 Servlet 3.0 引入的若干重要新特性,包括异步处理、新增的注解支持、可插性支持等等,为读者顺利向新版本过渡扫清障碍

    JavaEE 6 Servlet 3.0 中的新特性

    • 异步Servlet • Servlet 3.0 — 易于开发 – 主要关注点 • 增强了API 以便使用SE 5 中新的语言特性 – 例如:批注、泛型(Generics) – 在上次JavaEE 5 中漏掉的Servlet • 部署描述批注 – 现在web.xml 为可选 ...

    servlet和jsp学习指南pdf

    第14章讨论Servlet 3中的一项新特性,用来处理异步的操作;第15章阐述如何通过声明和编程方式来保护Java的Web应用程序;第16章讨论Servlet/JSP应用程序的部署过程,以及部署描述符中的元素;第17章阐述Servlet 3中的...

    servlet和jsp学习指南

    第14章讨论Servlet3中的一项新特性,用来处理异步的操作;第15章阐述如何通过声明和编程方式来保护Java的Web应用程序;第16章讨论Servlet/JSP应用程序的部署过程,以及部署描述符中的元素;第17章阐述Servlet3中的两...

    servlet和jsp学习指南_pdf.rar

    第14章讨论servlet 3中的一项新特性,用来处理异步的操作;第15章阐述如何通过声明和编程方式来保护java的web应用程序;第16章讨论servlet/jsp应用程序的部署过程,以及部署描述符中的元素;第17章阐述servlet 3中的...

    Servlet和Jsp学习指南(带详细书签)

    第14章讨论servlet 3中的一项新特性,用来处理异步的操作;第15章阐述如何通过声明和编程方式来保护java的web应用程序;第16章讨论servlet/jsp应用程序的部署过程,以及部署描述符中的元素;第17章阐述servlet 3中的...

    Servlet和jsp学习指南

    第14章讨论Servlet 3中的一项新特性,用来处理异步的操作;第15章阐述如何通过声明和编程方式来保护Java的Web应用程序;第16章讨论Servlet/JSP应用程序的部署过程,以及部署描述符中的元素;第17章阐述Servlet 3中的...

    Servle和JSP学习指南,完整扫描版

    第14章讨论Servlet 3中的一项新特性,用来处理异步的操作;第15章阐述如何通过声明和编程方式来保护Java的Web应用程序;第16章讨论Servlet/JSP应用程序的部署过程,以及部署描述符中的元素;第17章阐述Servlet 3中的...

    servet&jsp;学习指南

    第14章讨论Servlet 3中的一项新特性,用来处理异步的操作;第15章阐述如何通过声明和编程方式来保护Java的Web应用程序;第16章讨论Servlet/JSP应用程序的部署过程,以及部署描述符中的元素;第17章阐述Servlet 3中的...

    Servle和JSP学习指南

    第14章讨论Servlet 3中的一项新特性,用来处理异步的操作;第15章阐述如何通过声明和编程方式来保护Java的Web应用程序;第16章讨论Servlet/JSP应用程序的部署过程,以及部署描述符中的元素;第17章阐述Servlet 3中的...

    Spring5的Servlet和反应式技术栈解析

    1.Java大力转向了异步和非阻塞并发。...Spring5提供了Servlet和反应式这两种Web技术栈,在应用层面充分向异步和非阻塞并发靠拢。文中我分别使用“Servlet栈”和“反应式栈”来指代Spring5所提供的两种技

    annotaction

    1. 异步处理支持:有了该特性,Servlet 线程不再需要一直阻塞,直到业务处理完毕才能再输出响应,最后才 结束该 Servlet 线程。在接收到请求之后,Servlet 线程可以将耗时的操作委派给另一个线程来完成,自己 在不...

    Apache服务器tomcat7.0.12最新版,加入probe线程监视

    TOMCAT 7新特性  1 使用随机数去防止跨站脚本攻击。  2 改变了安全认证中的jessionid... 根据Mark Thomas,Tomcat 7委员会的经理的说法,Tomcat 7最显著的三个特征是Servlet 3.0,内存检测泄露和增强的安全特性。

    apache-tomcat-7.0.28

     根据Mark Thomas,Tomcat 7委员会的经理的说法,Tomcat 7最显著的三个特征是Servlet 3.0,内存检测泄露和增强的安全特性。  Tomcat 7的例子程序中,包含了Eclipse的工程文件和Ant的构建文件,以方便去构建war文件...

    tomcat-8.0.21

    Tomcat8新版本特性: 1.支持servlet3.1, jsp 2.3, el表达式3.0 and Java WebSocket 1.0. 2.默认http与ajp请求实现non-blocking技术,即NIO技术。 3.多个应用发布的时候可以先打成jar包,然后打成一个总的war发布。...

Global site tag (gtag.js) - Google Analytics