我有一个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(如我们的程序中那样),我该怎么办?我的程序中的任务是从Internet上的服务器获取数据并将其保存在数据库中。所以这意味着他们大部分时间都在等待数据进入(也就是空闲)。那么这个问题的最佳解决方案是什么?
答案 0 :(得分:1)
这实际上取决于具体情况:
最终,我强烈怀疑你自己需要对此进行基准测试 - 如果没有更多信息,就不可能提供一般指导,即使使用特定的数字,也可能是猜测工作。硬数据更有用:)
请注意,newScheduledThreadPool
的参数仅指定在线程空闲时要保留在线程池中的核心线程的数量 - 因此它将自己进行一定程度的平衡