0

OK、質問はとても簡単だと思います。これは大学でのテスト専用です。いくつかのパスワードをブルートフォース攻撃したいと思います(複雑にするのではなく、ブルートフォースによって特定の文字列を見つけるだけです)。これは基本的に、新しいスレッドで実行できるforループの組み合わせの1つです。その「スレッド」を同じネットワーク上のコンピューターに分散させる方法はありますか?複数のコンピューター(たとえば、電子クラスで-100台のコンピューターを使用)を使用して、同じforループ(スレッド)の処理能力をサポートします。そして、すべての解決策は、プログラムが開始されたそのコンピューター(ある種のマスターまたはサーバーコンピューター)に表示されます。

そのようなことはJavaで可能ですか?Windows7はオペレーティングシステムです。

4

3 に答える 3

1

フレームワークを使用する代わりに自分でアプリケーションを構築したい場合は、RMIトレイルをウォークスルーすることをお勧めします。http://docs.oracle.com/javase/tutorial/rmi/を参照してください

少し前に自分で単純な分散コンピューティングエンジンを作成しましたが、RMIを使用すると非常に簡単であることがわかりました。

于 2012-11-29T12:09:10.473 に答える
0

答えてくれてありがとう。すでに作成されているものなら何でも使用できます。その部分をコーディングする必要はありません。問題は、複数の小さな問題がないので、それらを他のクラスターに配布して、それらが解決するのを待つことができるということです...複数の処理能力を使用してスピードアップしたいLONG LOOPが1つ、LONGFORLOOPが1つだけです同じローカルネットワーク内のコンピューター。

これは、私が単独で作成したソフトウェアではなく、Java仮想マシンを接続するツールであるべきだと考えています。どういうわけか、それは私がこれに対する解決策を見る唯一の方法です。

于 2012-11-30T01:05:01.593 に答える
0

とてもシンプルです。マスター/コントローラー コンピューターと、複数のワーカー コンピューターまたはスレーブが必要です。マスターは問題をチャンクに分割し、チャンクをスレーブに割り当てます。スレーブは作業のチャンクを実行し、完了したらマスターに報告します。

最も複雑な部分は、マスター/スレーブが互いに通信できるようにすることです。比較的単純な解決策は、ソケットを使用して、簡単な通信プロトコルを発明することです。

マスター アルゴリズムは次のようになります。

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
}

スレーブがほとんどの時間を問題の解決に費やし、マスターとの通信を行わないように、チャンク サイズを十分に大きくする必要があります。スレーブがマスターと通信する頻度によって、1 つのマスターが処理できるスレーブの数が決まる可能性があります。最初の推測では、スレーブが処理に 2 ~ 3 分かかるようにチャンクのサイズを設定すると思います。

于 2012-11-29T12:21:01.133 に答える