Java:对httpRequests使用ExecutorService

Java:对httpRequests使用ExecutorService,java,multithreading,http,Java,Multithreading,Http,我有一个Web应用程序,在那里我接收到大量(每小时100K)http请求。我对Servlet容器线程处理没有任何顾虑 但是,对于每一个这样的web请求,我希望进一步多线程处理该过程,以便增加每个请求的响应时间 我希望使用ExecutorService,为每个这样的请求初始化newFixedThreadPool,并使用future对象缝合来自所有并发线程(针对每个请求)的响应,最后将响应提交回客户端 这种方法的优点是响应时间大大缩短,因为多个线程处理同一个请求,而不是单个线程 请建议这是不是正确的

我有一个Web应用程序,在那里我接收到大量(每小时100K)http请求。我对Servlet容器线程处理没有任何顾虑

但是,对于每一个这样的web请求,我希望进一步多线程处理该过程,以便增加每个请求的响应时间

我希望使用ExecutorService,为每个这样的请求初始化newFixedThreadPool,并使用future对象缝合来自所有并发线程(针对每个请求)的响应,最后将响应提交回客户端

这种方法的优点是响应时间大大缩短,因为多个线程处理同一个请求,而不是单个线程

请建议这是不是正确的方法

请建议,这条路对吗

您的服务器平均每秒处理近30个请求。每个请求需要多长时间才能完成?每个请求使用多少CPU时间?这占可用CPU的百分比是多少?每个请求在等待I/O或等待与其他服务(如数据库)对话时花费了多少时间?如果有重要的计算时间,计算是什么?将其并行化有意义吗

如果不知道这些问题的答案,没有人能说出多线程是否是“正确的方法”


编辑:你说每个请求需要400毫秒。好的,如果它们以稳定的每小时100K的速度进入,这意味着在任何给定的时刻,您的服务器将同时处理大约11个请求

这是有用的信息,但可能没有我问的其他问题有用:每个请求使用多少CPU时间?这占可用CPU的百分比是多少?等待I/O需要多少时间?这占可用I/O带宽的百分比是多少

您说每个请求都由几个独立的部分组成

如果将代码更改为在单独的线程中处理每个部分,可能会缩短总体响应时间,但可能不会。这里没有足够的信息——关于硬件平台的信息,关于应用程序的信息,关于它使用的资源的信息——来预测结果

你试过了吗

你让它听起来好像你已经知道如何做出改变。你说的好像不难。有时候,做实验是最容易找到答案的方法

请建议,这条路对吗

您的服务器平均每秒处理近30个请求。每个请求需要多长时间才能完成?每个请求使用多少CPU时间?这占可用CPU的百分比是多少?每个请求在等待I/O或等待与其他服务(如数据库)对话时花费了多少时间?如果有重要的计算时间,计算是什么?将其并行化有意义吗

如果不知道这些问题的答案,没有人能说出多线程是否是“正确的方法”


编辑:你说每个请求需要400毫秒。好的,如果它们以稳定的每小时100K的速度进入,这意味着在任何给定的时刻,您的服务器将同时处理大约11个请求

这是有用的信息,但可能没有我问的其他问题有用:每个请求使用多少CPU时间?这占可用CPU的百分比是多少?等待I/O需要多少时间?这占可用I/O带宽的百分比是多少

您说每个请求都由几个独立的部分组成

如果将代码更改为在单独的线程中处理每个部分,可能会缩短总体响应时间,但可能不会。这里没有足够的信息——关于硬件平台的信息,关于应用程序的信息,关于它使用的资源的信息——来预测结果

你试过了吗


你让它听起来好像你已经知道如何做出改变。你说的好像不难。有时候,做实验是最容易找到答案的方法。

这可能是不必要的。瓶颈可能是DB—您是否使用DBCP?或其他资源加载。在知道要优化什么之前不要尝试优化。我正在使用数据库连接池。我想优化的唯一原因是通过并行执行来减少响应时间。你能提供一些你正在使用的技术的背景信息吗?没有bacground的帮助有点困难。@ScaryWombat,OP没有提到任何DB@路易斯福。实际上,我可以看到他的评论说,
我正在使用数据库连接池。
这可能是不必要的。瓶颈可能是DB—您是否使用DBCP?或其他资源加载。在知道要优化什么之前不要尝试优化。我正在使用数据库连接池。我想优化的唯一原因是通过并行执行来减少响应时间。你能提供一些你正在使用的技术的背景信息吗?没有bacground的帮助有点困难。@ScaryWombat,OP没有提到任何DB@路易斯福。真的,我可以看到他的评论说:“代码>我使用数据库连接池。< /代码>每个请求大约需要400毫秒。考虑一个请求XML,它具有多个子元素。我希望在同一请求中通过单独的线程分别获取每个子元素和进程。响应时间与子元素的数量成正比。现在,当我为每个子元素调用一个线程时,无论子元素的数量如何,我都能在400毫秒内看到所有响应。@sumankumar-唯一知道的方法是尝试。为什么不试试看呢?我们在这里所能做出的所有假设,对于你的具体情况,最终都没有任何意义。当然。让我试着告诉你最新的结果。Tha