执行程序计划线程池 "more"线程池的影响是什么?



我有一个实现runnable接口的 3 个实例。我正在实例化我的Executor类,如下所示;

 executor = Executors.newScheduledThreadPool(2);<--- talking about this part
    executor.scheduleAtFixedRate(unassignedRunnable, 0, refreshTime, TimeUnit.SECONDS);
    executor.scheduleAtFixedRate(assignedToMeRunnable, 2, refreshTime, TimeUnit.SECONDS);
    executor.scheduleAtFixedRate(createTicketsFromFile, 3, refreshTime * 2, TimeUnit.SECONDS);

我的问题是,如果我将线程池计数从 2 更改为 13,这有什么区别吗?我尝试过,几乎一无所获。谁能解释线程池计数的真正用途?也许我的任务是轻量级的?

您需要了解,要创建多少线程并不重要,最终,线程将在可用内核数上执行。现在,根据文档,它是"要保留在池中的线程数,即使它们处于空闲状态"。

你能告诉我线程池计数的真正用途是什么吗

executor = Executors.newScheduledThreadPool(2);

上面的代码行将在线程池中创建2线程,但这并不意味着所有人都会做一些工作。但是,同时,同一线程可用于从提交的线程池中执行其他任务。

因此,在选择要创建的线程总数之前,最好先了解您的要求。(我通常更喜欢这个数字,具体取决于可用内核的数量(

那就是

corePoolSize 是 pool 中的数字线程。可用线程选取符合条件的任务并在同一线程中运行。如果没有可用的线程,尽管任务符合运行条件,则不会执行,因为所有线程都繁忙。在你的情况下,你的任务可能是非常短暂的。要演示,请创建核心池大小 1 并提交长时间运行的任务,然后提交轻任务,请检查行为,然后将核心池大小增加到 2 并查看行为。

这取决于运行应用程序的机器的 CPU 内核数。如果有更多的 CPU 内核,则可以并行运行多个线程,并且如果您的应用程序不是 IO 绑定应用程序,则可以提高整个系统的性能。

CPU绑定的应用程序将受益于更多数量的内核和线程。

如果您有 4 核 CPU,则可以将该值配置为 4。如果计算机具有单个 CPU 核心,则将池大小更改为 4 没有任何好处。

相关 SE 问题:

Java:如何根据 CPU 内核扩展线程?

多线程比单线程快吗?

相关内容

  • 没有找到相关文章

最新更新