加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 为并行处理数据选择最佳线程数

发布时间:2020-12-15 00:58:20 所属栏目:Java 来源:网络整理
导读:假设我有一个处理100万句话的任务. 对于每个句子,我需要对它做一些事情,无论处理它们的具体顺序如何. 在我的Java程序中,我有一组从我的主要工作块中划分出来的一组未来,它用一个可调用来定义要在一大块句子上完成的工作单元,我正在寻找一种优化线程数量的方
假设我有一个处理100万句话的任务.

对于每个句子,我需要对它做一些事情,无论处理它们的具体顺序如何.

在我的Java程序中,我有一组从我的主要工作块中划分出来的一组未来,它用一个可调用来定义要在一大块句子上完成的工作单元,我正在寻找一种优化线程数量的方法分配工作通过大块的句子,然后重新组合每个线程的所有结果.

在我看到收益递减之前,我可以使用的最大线程数是多少?

另外,是什么原因导致逻辑分配的线程越多,即一次完成的线程越多,就越不正确?

解决方法

在实践中,可能很难找到最佳线程数,甚至每次运行程序时该数字都可能会有所不同.因此,理论上,最佳线程数将是您机器上的核心数.如果您的核心是“超线程”(如英特尔所说),它可以在每个核心上运行2个线程.然后,在这种情况下,最佳线程数是计算机上核心数的两倍.
Also,what causes the logic that the more threads allocated,i.e. 
more being able to be done at once,to be incorrect?

分配更多线程导致同时完成更多工作的原因是错误的,因为只有1个(如果核心是“超线程”的话,只有2个线程)可以在每个核心上一次运行.

所以假设我有一个不是超线程的四核机器.在这种情况下,我可以同时运行最多4个线程.所以,我的最大吞吐量应该用4个线程来实现.假如我尝试在同一设置上运行8个线程.在这种情况下,内核将来回调度这些线程(通过上下文切换),并阻止一个线程以便让另一个线程运行.因此,最多可以一次运行4个线程的工作.

有关这方面的更多信息,使用Linux内核查找“上下文切换”非常有用.这将为您提供有关此主题的所有信息.

另请注意,称为“用户级线程”和“内核级别线程”的线程之间存在差异.如果您进一步研究这个主题,这是一个重要的区别,但它超出了这个问题的范围.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读