Java:使用ExecutorService进行httpRequests

时间:2016-02-16 05:15:23

标签: java multithreading http

我有一个Web应用程序,我收到很多(每小时100K)的http请求。我对Servlet容器线程处理没有任何顾虑。

但是,对于每个这样的Web请求,我希望进一步多线程化这个过程,以便我可以增加每个请求的响应时间。

我想使用ExecutorService,为每个这样的请求初始化newFixedThreadPool,并使用future对象来拼接所有并发线程的响应(对于每个请求),最后将响应提交给客户端。

我看到这种方法的优点是我的响应时间大大减少,因为多个线程对同一个请求而不是单个线程起作用。

请建议这是否正确?

1 个答案:

答案 0 :(得分:2)

  

请建议,这是正确的方法吗?

您的服务器平均每秒处理近30个请求。每个请求需要多长时间才能完成?每个请求使用多少CPU时间?可用CPU的百分比是多少?每个请求等待I / O或等待与其他服务(例如数据库)通信的时间是多少?如果计算时间很长,那么计算是什么?并行化是否有意义?

没有人能说多线程是否是正确的方式"不知道这些问题的答案。

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

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

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

如果您更改代码以在单独的线程中处理每个部分,它可能会缩短整体响应时间,也许它不会。这里的信息不够 - 有关硬件平台的信息,有关您的应用程序的信息,有关其使用的资源的信息 - 预测结果。

你试过吗?

您听起来好像已经知道如何进行更改。你觉得它听起来很难。有时候,做一个实验是最容易找到的方法。