java - 在多个服务器上分配 Java 线程?

标签 java queue parallel-processing distributed-computing

我是 Java 的新手,非常喜欢学习它。我制作了一个运行良好的程序,但当我添加更多数据以供处理时需要花费一些时间。我使它线程化,它确实加快了很多速度,但现在我正在考虑尝试加快它的速度(显然,它必须处理的数据越多,花费的时间越长)。仅供引用,我的程序不在线程之间共享任何数据,它获取列表中的一项并进行一些数学运算并将结果上传到数据库。理想情况下,几台工作计算机获取列表​​中的一些项目,然后执行其工作,然后获取更多工作直到完成

我做了一些研究并找到了队列,但我不确定它是否是我需要的,或者是否还有其他东西(我也在想保持 worker 的完整性/监控可能对我来说太过分了新手)。我家里有 4 台电脑(一些 Linux、mac 和 windows.. 但如果这些解决方案是特定于 os 的,我可以在所有非 linux 系统上安装 linux vm)并且想让他们也开始处理这个任务。我考虑过创建 Java 队列,让其他客户端参与其中并进行处理,但我也看到了库 (rabbitmq)。我还简要介绍了网格计算。

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

最佳答案

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

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

关于java - 在多个服务器上分配 Java 线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9535421/

相关文章:

java - 以最小的开销并行执行同一类的方法

java - 使用 EvaluationContextExtensionSupport 和自定义 PermissionEvaluator 将 Spring Boot 2.0.6 迁移到 2.1.0 时出现“无效的 bean 定义”

java - 表名未使用 jpa 映射

java - 使用 vector 编辑 JTable

java - Spring TaskExecutor实现队列优先级

c - c中的迭代目录遍历

java - 如何更改状态栏字体颜色?

sql-server - 我应该使用内存 SQL (Hekaton) 作为队列消息传递系统吗?

java - opencl 屏障不工作

c++ - NUMA 架构上大 (8MB) 内存区域的可扩展分配