用于大数据的Java并行计算

时间:2013-08-09 18:33:26

标签: java multithreading concurrency parallel-processing

有两组矩阵,即A(1 500个矩阵)和B(150 000个矩阵)。

对于来自集合A的每个矩阵a,我遍历a和b上的B检查标准中的所有元素b(如果对于某些矩阵b是真的,我停止迭代并返回true。但是如果在迭代之后没有找到匹配,则整个Set B,然后返回false)。

我的问题是如何使用Java使这个程序并行?

据我所知,矩阵集很大(我上面发布的元素数量只是例如,在现实生活中它们会更大)。如何正确地完成所有计算?创建1 5000个线程并完成所有计算实际上不是一个好主意。什么是最佳线程数量,这需要进行所有计算工作?

2 个答案:

答案 0 :(得分:1)

正如你所说,你可能需要检查所有对,并且没有启发式来帮助我们检查顺序,所以如果检查不需要任何导致CPU浪费的I / O或某事,如果你有4个例子{ {1}}核心,创建4线程(0-3),线程i负责检查4和每个a(4k+i)。在每次检查每个线程之前,你必须检查是否找到了真正的对,这可以通过扩展b的类中的静态变量来实现

Thread

你需要等到所有线程都停止工作。

答案 1 :(得分:1)

我认为您可能正在寻找ForkJoinPool

我会尝试将适合您情况的示例放在一起。从本质上讲,您应该将流程拆分为多个部分,也许在您的情况下,为每个a使用一个fork,并遍历该fork中的所有b。该池自动充分利用您的处理器。

有一个非常简单的例子here