我有一个 Java 程序可以计算两个文档之间的语义相似度。该程序从指定的文件系统中检索文档并计算相似度。大约有 2,00,000 个这样的文档。
我为此任务创建了 10 个线程,并为每个线程分配了数据卡盘。对于前。第一个线程记录 1-20000,下一个线程记录 20001-40000,依此类推。
目前我正在一台 8 CPU 核心的机器上运行上面的程序。完成计算需要很多时间。
我想在每个节点有 64 个内核的 5 节点 Linux 集群上运行该程序。
- Java 中是否有任何可用的框架(例如 EXECUTOR Framework)可以完成此任务?
- 有没有一种方法可以计算一个人可以产生的最大线程数?
任何有关如何解决此问题或做得更好的建议都将不胜感激。
最佳答案
Java 中是否有可用的框架,例如 EXECUTOR Framework 可以完成此任务?
我建议你看看 Akka framework用于编写强大的并发和分布式应用程序。 Akka 将 Actor 模型与软件事务内存结合使用,以提高抽象级别并提供更好的平台来构建正确的并发和可扩展应用程序。
一步步看tutorial提供了有关如何使用 Akka 框架构建分布式应用程序的更多信息。
一般来说,分布式应用程序是使用 Java 构建的 Java-RMI在内部使用 Java 的内置序列化在节点之间传递对象。
有没有一种方法可以计算一个人可以产生的最大线程数?
我们使用的简单规则是,设置为高于系统中可用逻辑核心的值。值(value)高多少取决于我们所做的操作类型。例如,如果计算涉及 IO 通信,则将线程数设置为 2 * 可用逻辑内核(不是物理内核)。
我们使用的其他想法,
- 通过一个一个地增加线程数来测量 CPU 利用率,当 CPU 利用率接近 90-100% 时停止
- 测量吞吐量并停止吞吐量停留或开始下降的点
关于java - 在多核集群节点上并行运行 java 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30694690/