gpt4 book ai didi

java - 为什么 ScheduledThreadPoolExecutor 只接受固定数量的线程?

转载 作者:IT老高 更新时间:2023-10-28 21:06:40 25 4
gpt4 key购买 nike

我可能会想象一些计划执行的任务需要很长时间,而 ScheduledThreadPoolExecutor 会为其他需要运行的任务创建额外的线程,直到达到最大线程数。

但是好像我只能为池指定固定数量的线程,为什么会这样呢?

最佳答案

为什么,我也不知道。但我可以想象。

计算机的资源量是有限的。也不是所有资源都可以同时处理。

如果多个进程同时加载文件,它们的加载速度将比按顺序加载时要慢(至少在硬盘上)。

处理器对同时处理多个线程的支持也有限。在某些时候,操作系统或 JVM 切换线程所花费的时间比线程执行其代码所花费的时间要多。

这是 ScheduledThreadPoolExecutor 被设计成这样的一个很好的理由。您可以将任意数量的作业放入队列中,但同时执行的作业永远不会超过可以高效运行的作业。当然,这取决于你自己来平衡。

如果您的任务受 IO 限制,我会将池大小设置为小,如果它们受 CPU 限制,则设置大一点(32 左右)。您还可以制作多个 ScheduledThreadPoolExecutor,一个用于 IO 绑定(bind)任务,一个用于 CPU 绑定(bind)任务。

关于java - 为什么 ScheduledThreadPoolExecutor 只接受固定数量的线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3353002/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com