java线程池批量提交任务,Java线程池:拥有大量较小的任务会更好,或者批量较大的任务会更少...

本文探讨了在Java应用程序中通过多线程来提高性能的两种策略。一种是将100,000个单独的任务提交给线程池,另一种是将任务拆分为4个大块进行处理。尽管多线程使用了多个CPU核心,但在选项1中未观察到明显的性能提升。作者推测选项2,即减少任务的粒度,可能会减少开销并提高效率。文章寻求关于这两个选项的性能比较和最佳实践的建议。
摘要由CSDN通过智能技术生成

我们目前正在尝试通过在我们的

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个单个项.

有什么想法吗?

谢谢

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值