Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在多核集群节点上并行运行java应用程序_Java_Multithreading_Concurrency_Parallel Processing - Fatal编程技术网

在多核集群节点上并行运行java应用程序

在多核集群节点上并行运行java应用程序,java,multithreading,concurrency,parallel-processing,Java,Multithreading,Concurrency,Parallel Processing,我有一个Java程序,可以计算两个文档之间的语义相似性。该程序从指定的文件系统检索文档并计算相似性。大约有20万份这样的文件。 我为这个任务创建了10个线程,并为每个线程分配了数据卡盘。例如,文档1-20000用于第一个线程,20001-40000用于下一个线程,依此类推。 目前我正在一台8 CPU的核心机器上运行上述程序。完成计算要花很多时间。 我想在5节点Linux集群上运行该程序,其中每个节点有64个内核。 在Java中是否有类似EXECUTOR Framework的框架可以完成此任务

我有一个Java程序,可以计算两个文档之间的语义相似性。该程序从指定的文件系统检索文档并计算相似性。大约有20万份这样的文件。
我为这个任务创建了10个线程,并为每个线程分配了数据卡盘。例如,文档1-20000用于第一个线程,20001-40000用于下一个线程,依此类推。
目前我正在一台8 CPU的核心机器上运行上述程序。完成计算要花很多时间。
我想在5节点Linux集群上运行该程序,其中每个节点有64个内核。

  • 在Java中是否有类似EXECUTOR Framework的框架可以完成此任务
  • 有没有办法计算一个人可以产生的最大线程数?
    任何关于如何解决这个问题或如何做得更好的建议都将不胜感激

在Java中是否有类似EXECUTOR Framework的框架可以完成此任务?

我建议您了解一下编写强大的并发和分布式应用程序的方法。Akka使用Actor模型和软件事务内存来提高抽象级别,并提供更好的平台来构建正确的并发和可扩展应用程序

请看一步一步介绍如何使用Akka框架构建分布式应用程序

通常,分布式应用程序是使用Java构建的,内部使用Java的内置序列化在节点之间传递对象

有没有办法计算一个人可以产生的最大线程数?

我们使用的简单规则是,设置为高于系统中可用逻辑核的值。值高多少取决于我们执行的操作类型。例如,如果计算涉及IO通信,则将线程数设置为2*可用逻辑核(而不是物理核)

我们使用的其他想法

  • 通过逐个增加线程数来测量CPU利用率,并在CPU利用率接近90-100%时停止
  • 测量吞吐量并停止吞吐量保持或开始下降的点
    • Java是你的朋友。正如该框架的开场白所说:

      fork/join框架是ExecutorService的一个实现 界面,帮助您利用多处理器的优势。它是 设计用于可以递归地分解成更小片段的工作。 目标是使用所有可用的处理能力来增强 应用程序的性能

      取决于你能产生多少线程——我认为没有这样的硬性规定,这要看情况而定。因此,您可以尝试从5左右的数字开始,然后根据结果不断增加或减少。

      此外,您还可以分析现有的最大和最小线程数,并将其与CPU利用率等进行对比,然后继续这样做以了解系统的行为。如果您的应用程序部署在application server中,请检查其线程模型以及它们对线程容量的说明。

      您是否将200000个文档中的每个文档与一个预定义文档或所有其他文档进行比较?您问了我正在寻找的同一个问题,+1回答了这么好的问题(y)