我有一个要求,我需要处理当前现场表演的一些任务。这是一个计划任务,每分钟运行一次。
在任何给定的时刻,都可以有任意数量的现场表演(尽管数量不能那么大,大约最多 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()
,而无需创建另一个池。但同样,这取决于你在做什么。