好的,我想问题很简单。这只是为了在大学里测试。我想要暴力破解一些密码(不是为了复杂化,只是为了通过暴力破解找到给定的字符串)。它基本上是一个循环组合,可以在新线程中执行。有没有办法在同一网络上的计算机上分配这个“线程”?使用多台计算机(例如,在电子类中-有100台计算机),仅仅是为了利用它们的处理能力来支持相同的for循环(线程)。并且所有的解决方案都显示在启动程序的计算机上(某种主计算机或服务器计算机)。
这样的事情在Java中是可能的吗?Windows 7是操作系统。
发布于 2012-11-29 20:09:10
如果您想自己构建应用程序,而不是使用框架,我建议您浏览一下RMI Trail:请参阅http://docs.oracle.com/javase/tutorial/rmi/
不久前,我自己做了一个简单的分布式计算引擎,结果证明使用RMI非常容易。
发布于 2012-11-29 20:21:01
这很简单。您需要有一台主/控制器计算机和几台工作计算机或从计算机。主节点将问题分解为块,并将块分配给从节点。从机执行大量工作,并在完成后向主机报告。
最复杂的部分是让主机/从机相互通信。一个相对简单的解决方案是使用套接字并发明一些微不足道的通信协议。
主算法看起来像这样;
break problem into chunks
while problem not solved {
wait for socket comms from slave
if slave is asking for a chunk of work
allocate chunk to slave
else if slave is reporting a chunk didn't contain the solution
mark chunk as completed
allocate chunk to slave
else if slave is reporting a chunk did contain the solution
problem is solved
}从属算法看起来像这样;
while problem not solved {
ask master for a chunk of work
process this chunk
if chunk contains solution
problem is solved
report results back to master
}您需要使您的块大小足够大,以便从属程序将大部分时间用于解决问题,而不是与主程序交谈。从机与主机对话的频率可能决定单个主机能够处理的从机数量。在第一次猜测时,我会说调整数据块的大小,以便从机只需要2到3分钟来处理它。
发布于 2012-11-30 09:05:02
谢谢你的回答。我可以使用任何已经制作好的东西,我不需要编写那部分代码。问题是,没有多个小问题,所以我可以将它们分发到其他集群,等待它们解决它们……只有一个长循环,一个长FOR循环,我想使用同一本地网络中多台计算机的处理能力来加快速度。
我在想,这应该是连接Java虚拟机的工具,而不是我单独编写的软件。不知何故,这是我认为解决这个问题的唯一方法。
https://stackoverflow.com/questions/13625249
复制相似问题