我正在使用一个客户端应用程序,它需要从Rest请求数据。这些请求中有许多是独立的,因此可以异步调用它们。我正在使用ThreadPoolExecutor来实现这一点,并且我已经看到它可以使用几个参数进行配置:
我读过这篇文章,我理解以下内容:
但我有一些问题:
提前谢谢你
更新
我目前的价值观是:
发布于 2014-06-24 16:13:15
corePoolSize是要保存在池中的线程数,即使它们是空闲的,除非设置了{@ allowCoreThreadTimeOut}。maximumPoolSize是池中允许的最大线程数。corePoolSize是您希望永远等待的线程数量,即使没有人请求它们。maximumPoolSize是您将启动的Rest的线程数和并发请求数的最大值。
corePoolSize >= requests per second * seconds per request
maximumPoolSize >= maximum requests per second * seconds per request
queueCapacity <= maximumPoolSize * maxWaitTime / timePerRequest (您应该监视这一点,以便您知道什么时候必须采取行动)。
您必须记住,Rest或您自己的应用程序/服务器/带宽可能会对并发连接的数量施加一些限制,而且许多并发请求可能会增加每个请求的时间。
我宁愿保持低corePoolSize,keepAliveTime相当高。
您必须记住,仅对于并行HTTP请求,每个线程都会增加相当大的开销,应该有一个NIO变体来执行此操作,而不需要大量线程。也许你可以试试阿帕奇米娜。
https://stackoverflow.com/questions/24390882
复制相似问题