【发布时间】:2014-08-14 23:11:46
【问题描述】:
我正在使用需要从 Rest API 请求数据的客户端应用程序。其中许多请求是独立的,因此可以异步调用它们。我正在使用 ThreadPoolExecutor 来执行此操作,并且我已经看到它可以使用多个参数进行配置:
- corePoolSize
- maxPoolSize
- 队列容量
我阅读了this article 并了解以下内容:
- corePoolSize 是执行器添加新线程而不是排队的值
- maxPoolSize 是上面哪个执行器排队请求的值
- 如果实际线程数在 corePoolSize 和 maxPoolSize 之间,则请求排队。
但我有一些问题:
- 我一直在测试,corePoolSize越高,我得到的结果就越好。在有很多客户向这个 Rest API 提出请求的生产环境中(可能每天数百万),corePoolSize 应该多高?
- 我应该如何获得“最佳”参数?仅通过测试?
- (每个参数的)高/低值可能导致哪些问题?
提前谢谢你
更新
我目前的价值观是:
- corePoolSize = 5
- maxPoolSize = 20
- queueCapacity = 100
【问题讨论】:
-
你的理解是错误的(我在链接的文章中找不到任何会导致它的东西)。请注意,从您所说的 maxPoolSize 是多余的,因为当线程数高于和低于它时,您都会对请求进行排队。
-
注意:如果可以将任务添加到队列中,则池大小不会增长。您可能会发现,即使您没有填满队列,拥有更多线程也会有所帮助。
标签: java asynchronous threadpoolexecutor