我们目前正在尝试通过在我们的
Java应用程序中使用多线程来调整性能.
我们有一个长期运行的串行任务,我们希望将其拆分为多CPU内核.
基本上我们有列表,让我们说100.000项目/事情要做.
我现在的问题是做得更好:
选项1(伪代码):
for(i = 0; i < 100000; i++){
threadpool.submit(new MyCallable("1 thing to do"))
}
这会将100000个runnables / callables添加到线程池的队列中(当前LinkedBlockingQueue)
或者做得更好:
选项2(伪代码)
for(i = 0; i < 4; i++){
threadpool.submit(new MyCallable("25000 things to do"))
}
我们已经尝试过选项1,虽然我们可以清楚地看到多个线程正在疯狂运行并且还使用了4个CPU核心,但我们没有注意到任何性能提升.但我的感觉是,由于许多任务,选项1中存在一些开销.我们还没有尝试过选项2,但我的感觉是,它可以加快速度,因为开销较少.我们基本上将列表拆分为4个更大的块而不是100000个单个项.
有什么想法吗?
谢谢