Executor ScheduledThreadPool "more"个线程池有什么作用?
Executor ScheduledThreadPool What are effects of "more" thread pools?
我有一个 a class 的 3 实例,它正在 实现 runnable
接口 。我正在实例化我的 Executor
class 如下所示;
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
更改为 1
或 3
会有什么不同吗?我尝试过,几乎一无所获。谁能解释线程池计数的实际用途?也许我的任务很轻?
那是 corePoolSize 是池中的线程数。可用线程选择符合条件的任务和 运行 在同一个 thread.If 中没有线程可用,尽管任务符合 运行 不会执行所有线程 busy.In 你的情况可能是你的任务非常短 lived.To 演示创建 corepool 大小一并提交长 运行ning 任务然后提交轻任务检查行为然后增加将 corepoolsize 设置为 2 并查看行为。
您需要了解,创建多少线程并不重要,最终,线程将在可用核心数上执行。现在,根据 documentation,它是 "the number of threads to keep in the pool, even if they are idle."
Can you tell me what is the real use of thread pool count
executor = Executors.newScheduledThreadPool(2);
以上代码行将在线程池中创建 2
个线程,但这并不意味着所有线程都会做一些工作。但是,在同一时间,同一线程可用于执行已提交的线程池中的一些其他任务。
因此,最好在选择要创建的线程总数之前了解您的要求。 (我通常更喜欢数字,具体取决于可用内核数)
这取决于您在 运行 上安装您的应用程序的机器的 CPU 核心数。如果您有更多 CPU 个内核,多个线程可以 运行 并行,并且如果您的应用程序不是 IO Bound 应用程序,则可以提高整个系统的性能。
CPU 绑定的应用程序将受益于更多的内核和线程数。
如果您有 4 个核心 CPU,您可以将值配置为 4。如果您的机器只有一个 CPU 核心,将池大小更改为 4 没有任何好处.
相关 SE 问题:
Java: How to scale threads according to cpu cores?
我有一个 a class 的 3 实例,它正在 实现 runnable
接口 。我正在实例化我的 Executor
class 如下所示;
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
更改为 1
或 3
会有什么不同吗?我尝试过,几乎一无所获。谁能解释线程池计数的实际用途?也许我的任务很轻?
那是 corePoolSize 是池中的线程数。可用线程选择符合条件的任务和 运行 在同一个 thread.If 中没有线程可用,尽管任务符合 运行 不会执行所有线程 busy.In 你的情况可能是你的任务非常短 lived.To 演示创建 corepool 大小一并提交长 运行ning 任务然后提交轻任务检查行为然后增加将 corepoolsize 设置为 2 并查看行为。
您需要了解,创建多少线程并不重要,最终,线程将在可用核心数上执行。现在,根据 documentation,它是 "the number of threads to keep in the pool, even if they are idle."
Can you tell me what is the real use of thread pool count
executor = Executors.newScheduledThreadPool(2);
以上代码行将在线程池中创建 2
个线程,但这并不意味着所有线程都会做一些工作。但是,在同一时间,同一线程可用于执行已提交的线程池中的一些其他任务。
因此,最好在选择要创建的线程总数之前了解您的要求。 (我通常更喜欢数字,具体取决于可用内核数)
这取决于您在 运行 上安装您的应用程序的机器的 CPU 核心数。如果您有更多 CPU 个内核,多个线程可以 运行 并行,并且如果您的应用程序不是 IO Bound 应用程序,则可以提高整个系统的性能。
CPU 绑定的应用程序将受益于更多的内核和线程数。
如果您有 4 个核心 CPU,您可以将值配置为 4。如果您的机器只有一个 CPU 核心,将池大小更改为 4 没有任何好处.
相关 SE 问题:
Java: How to scale threads according to cpu cores?