Executors.newFixedThreadPool() - 这个操作有多昂贵

Executors.newFixedThreadPool() - how expensive is this operation

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

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

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

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

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

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

问题陈述

1.) 上面的操作要花多少钱..??。在给定的每一分钟创建 fixedThreadPool。

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

Can i create a fixed thread pool at worker level, and maintain it and utilize that.

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

How much expensive the above operation be..??. Creating fixedThreadPool at every given minute.

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

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

What can i do to optimize my solution, should i use a fixed thread pool, say (10), and maybe 3 or 5 or 6 or any number of threads getting utilized at any given minute.

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