当前位置: 首页 > 面试题库 >

选择用于并行处理数据的最佳线程数

景鸿才
2023-03-14
问题内容

假设我有一个处理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内核查找“上下文切换”将非常有帮助。这将为您提供有关此主题的所有信息。

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



 类似资料:
  • 译者:bat67 最新版会在译者仓库首先同步。 在这个教程里,我们将学习如何使用数据并行(DataParallel)来使用多GPU。 PyTorch非常容易的就可以使用GPU,可以用如下方式把一个模型放到GPU上: device = torch.device("cuda:0") model.to(device) 然后可以复制所有的张量到GPU上: mytensor = my_tensor.to(

  • 目前,我的应用程序的某些部分在将大量数据加载到报告表时遇到了速度问题。报告表中的数据是从多个表中提取的,并运行一些复杂的查询,但这是必需的。 除了优化代码,我的问题是,您个人如何处理需要向用户显示的大量数据,最佳实践是什么? 目前我正在处理所有的数据,然后通过javascript库生成数据表。 我知道的事情: 用户不需要一次看到所有数据 用户需要能够搜索所有数据 用户需要能够过滤数据 最好的方法真

  • 我有一个表格,其中包含根据订购的数量和下订单的客户类型的特定项目的价格... 我在SQL中的WHERE子句中遇到问题,无法选择客户根据订购数量获得最佳价格的行。规则是,他们必须至少满足数量,才能获得该定价层的价格。如果他们的订单低于最低数量,那么他们将获得第一个数量的价格(本例中为10),如果他们的订单超过最大数量(本例中为30),则他们将获得该价格。 例如如果一家餐厅订购26单位奶酪,则应选择I

  • 我使用的是Spring Batch 2.1.8。释放我有一个文件,它由一些头信息和一些需要处理的记录组成。 我有一个使用面向块处理的步骤。该步骤包含ItemReader和ItemWriter的实现。ItemReader实现是线程安全的,而ItemWriter不是。 我想在处理(或写入)任何记录之前使用标题信息。在继续使用面向块的处理时,如何确保这一点? 建议的解决方案:一种解决方案可以是编写一个预

  • 问题内容: 我正在尝试编写一个小型节点应用程序,该应用程序将搜索并解析文件系统上的大量文件。为了加快搜索速度,我们尝试使用某种类型的map reduce。该计划将是以下简化方案: Web请求带有搜索查询 启动3个进程,每个进程分配1000个(不同)文件 进程完成后,它将“返回”结果回到主线程 一旦所有进程完成,主线程将通过返回组合结果作为JSON结果来继续 我对此有以下疑问: 这在Node中可行吗

  • 我有一个包含三列字符串的数据框。我知道第三列中只有一个值对前两列的每个组合都有效。要清理数据,我必须按数据帧按前两列进行分组,并为每个组合选择第三列的最常用值。 我的代码: 最后一行代码不起作用,它说“关键错误‘简称’”,如果我试图只按城市分组,那么我得到了一个断言错误。我能做什么来修复它?