异步servlet处理如何提高性能

时间:2014-06-06 20:15:44

标签: java multithreading servlets asynchronous

我从http://docs.oracle.com/javaee/7/tutorial/doc/servlets012.htm

读到
  

Java EE为servlet和过滤器提供异步处理支持。如果servlet或过滤器在处理请求时达到可能阻塞的操作,它可以将操作分配给异步执行上下文,并立即将与请求关联的线程返回到容器而不生成响应。阻塞操作在不同线程中的异步执行上下文中完成,它可以生成响应或将请求分派给另一个servlet。

我想知道

在哪里
  

不同的帖子

来自哪里?假设容器有10个线程,其中5个是处理请求,我们必须使用另外5个来处理长时间运行的业务逻辑?我们在哪里获得性能提升?可用的总线程数是有限的,对吗?

感谢。

1 个答案:

答案 0 :(得分:1)

详细了解Servlet 3 0 final-spec - Section 2.3.3.3 - Asynchronous processing详情。

它使容器调度一个线程,可能来自托管线程池,以运行指定的RunnableAsyncContext Servlet 3.0规范中定义的标准方式,用于异步处理HTTP请求

  

基本上HTTP请求不再绑定到HTTP线程,允许我们稍后处理它,可能使用更少的线程。事实证明,规范提供了一个API来处理开箱即用的不同线程池中的异步线程


阅读有关创建线程池的Executors.newFixedThreadPool()的更多信息,该线程池重用在共享无界队列中运行的固定数量的线程。在任何时候,最多nThreads线程将是活动的处理任务。如果在所有线程都处于活动状态时提交了其他任务,则它们将在队列中等待,直到线程可用。

请查看ExecutorService以了解更多相关信息以及示例代码。