gpt4 book ai didi

java - ScheduledExecutorService 的线程池大小

转载 作者:行者123 更新时间:2023-12-01 15:34:11 26 4
gpt4 key购买 nike

我有一个 ScheduledExecutorService 来获取定期执行的任务:

scheduler = Executors.newScheduledThreadPool( what size? );

public addTask(ScheduledFuture<?> myTask, delay, interval) {
myTask = scheduler.scheduleAtFixedRate(new Runnable() {
// doing work here
},
delay,
interval,
TimeUnit.MILLISECONDS );
}

调度程序获得的任务数量完全取决于我的程序的用户。通常情况下,将 ThreadPoolSize 设置为 #number_of_Cpu_Threads 应该是一个好主意,以便每个 CPU 或 CPU 线程一次执行一个任务,因为这应该提供最快的吞吐量。但是,如果任务涉及 I/O(就像我的程序中那样),我该怎么办?我的程序中的任务是从互联网上的服务器获取数据并将其保存在数据库中。因此,这意味着大多数时间他们都在等待数据进入(也称为空闲)。那么解决这个问题的最佳方案是什么?

最佳答案

这实际上取决于确切的上下文:

  • 将添加多少任务? (您说过这取决于用户,但是您有任何想法吗?在需要创建池之前您知道这一点吗?)
  • 每个项目需要多长时间?
  • 他们会从事任何高强度工作吗?
  • 如果它们都保存到同一个数据库,是否存在并发问题? (也许您希望有多个线程从不同的服务器获取数据并将项目放入队列中,但只有一个线程实际将数据存储在数据库中?)
  • 只要不“落后”,性能到底有多重要?

最终,我强烈怀疑您需要自己进行基准测试 - 如果没有更多信息,就不可能提供一般指导,即使有具体的数字,它也主要是猜测。硬数据更有用:)

请注意,newScheduledThreadPool 的参数仅指定在线程空闲时要保留在线程池中的核心 线程数 - 因此它将执行一定量的操作平衡自身。

关于java - ScheduledExecutorService 的线程池大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9172273/

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