Executors.newFixedThreadPool() - 此操作的成本有多高



我有一个要求,我需要处理当前现场表演的一些任务。这是一个计划任务,每分钟运行一次。

在任何给定的时刻,都可以有任意数量的现场表演(尽管数量不能那么大,大约最多 10 场)。所有现场表演都需要完成 20 多个功能。 或者说有20个工人班,都在做那里的工作。

假设第一个功能,有 5 个节目,几分钟后节目减少到 2 个,几分钟后节目增加到 7 个。

目前我正在做这样的事情,

int totalShowsCount = getCurrentShowsCount();
ExecutorService executor = Executors.newFixedThreadPool(showIds.size());

上述语句每分钟执行一次。

问题陈述

1.)上述操作的成本是多少..??.在给定的分钟创建固定线程池。

2.) 我能做些什么来优化我的解决方案,如果我使用固定线程池,比如 (10),也许在任何给定的分钟内使用 3 个、5 个或 6 个或任何数量的线程。

我可以在工作线程级别创建一个固定的线程池,并维护它和 利用这一点。

仅供参考,使用Java8,如果有更好的方法可用。

上述操作的成本是多少..??.在给定的分钟创建固定线程池。

创建线程池是一项相对昂贵的操作,可能需要几毫秒。 您不想每秒执行此操作多次。

一秒钟对计算机来说是永恒的,如果你有一台 36 核的机器,它可以在这段时间内执行多达 1000 亿条指令。 一分钟是非常非常长的时间,如果你每分钟只做一次事情,你甚至可以每分钟重新启动一次JVM,并且仍然获得合理的吞吐量。

我该怎么做来优化我的解决方案,如果我使用固定线程池,比如 (10),也许在任何给定分钟使用 3 个、5 个或 6 个或任何数量的线程。

可能,这取决于你在做什么。 如果没有大多数分析,你可以肯定地说。 注意:如果您使用的是 parallelStream(),如果不是,您应该查看是否可以,您可以使用内置ForkJoinPool.commonPool(),而无需创建另一个池。但同样,这取决于你在做什么。

相关内容

  • 没有找到相关文章

最新更新