繁体   English   中英

Java:对httpRequest使用ExecutorService

[英]Java : Using ExecutorService for httpRequests

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

但是,对于每个这样的Web请求,我想进一步对该过程进行多线程处理,以便我可以增加每个请求的响应时间。

我想使用ExecutorService,为每个此类请求初始化newFixedThreadPool,并使用future对象从所有并发线程(对于每个请求)中缝合响应,最后将响应提交回客户端。

我看到的这种方法的优点是,由于多个线程正在处理同一请求,而不是单个线程,因此我的响应时间大大减少了。

请提出这是否正确的方法?

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

您的服务器平均每秒处理近30个请求。 每个请求需要多长时间才能完成? 每个请求使用多少CPU时间? 那是可用CPU的百分之几? 每个请求在等待I / O或等待与其他服务(例如数据库)交谈时花费了多少时间? 如果有大量的计算时间,那么该怎么算? 并行化是否有意义?

没有人知道这些问题的答案,谁也无法说出多线程是否是“正确的方法”。


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

这是有用的信息,但可能不如我问的其他问题有用:每个请求使用多少CPU时间? 那是可用CPU的百分之几? 等待I / O需要花费多少时间? 那是什么百分比的可用I / O带宽?

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

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

你试过了吗?

您听起来好像已经知道如何进行更改。 您听起来好像并不困难。 有时,进行实验是找出答案的最简单方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM