在多个服务器上分发java线程?

Los*_*oul 8 java queue parallel-processing distributed-computing

我是java的新手,非常喜欢学习它.我已经制作了一个运行良好的程序,但是当我添加更多数据进行处理时需要一些时间.我把它做了线程,它确实加速了很多,但现在我正在考虑加快速度(显然它需要处理的数据越多,所需的时间越长).只是一个fyi,我的程序不会在线程之间共享任何数据,它会获取列表中的一项并进行一些数学运算并将结果上传到数据库.理想情况下,一些工作计算机会获得列表中的一些项目然后完成其工作,然后在完成之前获得更多工作

我做了一些研究并找到了队列,我不确定它是否是我需要的东西,或者是否有其他的东西(我也在考虑保持工人的诚信/监督对我来说可能对于作为新手来说太多了).我家里有4台电脑(一些Linux,Mac和Windows ..但我可以在所有非Linux系统上安装linux vm,如果这些解决方案特定于操作系统)并且想要让他们也开始处理这项任务.我想创建Java队列,其他客户端采取一个部分和过程,但我也看到了库(rabbitmq).我也简要介绍过网格计算.

这是要走的路还是有更好的方法?我不需要任何代码或任何东西只是想知道分发线程的解决方案是什么,或者在评估时使用哪些因素.

Pet*_*rey 9

您可以使用JMS或Hazelcast(例如分布式ExecutorService)在计算机之间分配工作.

我首先要做的是改进你的算法.您可能会发现使用4台机器可以快2-4倍,但通过性能分析,重构和调整,您可以获得10-1000倍的性能提升,通常复杂性较低.


Tom*_*icz 7

只是为了结束 - 你已经扩大规模,现在你想扩大规模.从我的头顶:

  • :您可以创建一个Queue将自动分布在整个集群中的Java .基本上,您运行相同的应用程序,几乎没有线程从队列中读取数据.赤土陶器神奇地分配了那个队列,让它感觉像是当地的物体.

  • - 类似于Terracotta,分布式数据结构和执行器的方法

  • - 将带有一项工作的消息发送到JMS队列(队列,再次)并拥有多个侦听器.每个监听器或多或少都是一个线程.可以在不同的计算机上设置监听器.

  • - Map/Reduce Java框架可以轻松扩展大量数据.通常用于处理数据和汇总结果.