我应该限制我的执行人数吗?

时间:2010-11-05 12:31:50

标签: java concurrency executorservice executor

我有一个Java项目,我需要并行运行。我是执行者这样做的。问题是,我需要在很多地方使用执行器。我是否赞成传递一些执行器来完成工作(忘记暂时限制全局线程数)或者在我需要的地方创建执行器是否更可取?

2 个答案:

答案 0 :(得分:3)

您真正需要考虑的是控制使用您创建的任何执行程序的线程数。

您为每个执行程序创建的线程数将取决于提交的每个任务的到达频率和预期持续时间(处理时间)。拥有每个逻辑任务类型的队列允许您仅针对该任务调整执行程序,以便您没有比所需更多的线程,并且您始终可以跟上预期的任务吞吐量。

如果您在应用程序的所有处理阶段共享一个单片Executor,则调整起来会变得更加困难。

SEDA是一种典型的并发模式,它反映了每个处理阶段的队列原则。

在某些情况下,拥有共享执行程序是有意义的,例如对于不常见,临时或低优先级的计划任务。

答案 1 :(得分:0)

没有严格的规则可以告诉您应该使用多少执行程序。但有一点可以推荐。使用一些依赖注入机制或框架来注入执行程序实现。这样可以快速方便地更换和配置使用过的执行程序。