1

そのため、現在、Scala コードを複数のマシンに分散して大きなグラフ (質問の「パート 1」 ) を作成する作業を行っており、現在、アクターとリモーティングを使用することを期待して Akka フレームワークを使用しています。

ドキュメントhereを読みましたが、例の実行方法を拡張して、やりたいことを実行できるようですが、この方法に関していくつか懸念があります...

1) 作成するアクターのインスタンスの数をどのように決定しますか? どちらが最適かを判断するために試行錯誤を行う必要がありますか、それとももっと直感的な方法がありますか?

2) 例が行われた方法と同様にタスクを実行することを考えています - 複数のワーカーを生成し、ケース クラスをメッセージとして使用して通信するマスターを使用します。私がやりたいことは、すべてのペアについて、頂点のペア (ランダム ウォーク) 間のメトリックを見つけることです。2 つの頂点を指定してメトリックを計算するメソッドを実装するグラフ クラスがあります。

各ワーカーに 2 つの頂点 'u' と 'v' を与えてメトリックを計算し、ワーカーに値を返させます。

メトリクスを計算するためにマスターがワーカーにメッセージを送信するとき、ワーカーはグラフ構造を必要とします - メッセージにグラフ構造 (つまり、HashMap である隣接リスト) を含めるだけでこれを行うことができますか? これにより、毎回グラフ構造をコピーすることでオーバーヘッドが発生しますか、それともすべてのワーカーがそのグラフを共有するだけですか?

3) 頂点のペア間のメトリックを計算するためのアルゴリズムを拡張された Actor クラスに再実装する必要がありますか、または個々のアクタが同じグラフ構造にアクセスしてメソッドを呼び出す方法はありますか (これはグラフ構造全体をメッセージの一部として渡すことに関する上記の質問)?

ありがとう!よろしく、 -kstruct

4

1 に答える 1

3

1) 作成するアクターのインスタンスの数をどのように決定しますか?

アクターは基礎となるスレッド管理を抽象化しますが、使用可能な CPU コアよりも少ないアクターを作成すると、計算能力が浪費されます。10 台のサーバーがあり、それぞれに 8 つのコアがある場合、少なくとも 80 個のアクター (マシンごとに 8 個) を作成します。

アルゴリズムが CPU を集中的に使用する場合、より多く作成してもパフォーマンスは向上しません。追加のワーカーは、利用可能なコアを待つだけです。

[...] Worker にはグラフ構造が必要です。メッセージにグラフ構造 (つまり、HashMap である隣接リスト) を含めるだけでこれを行うことができますか? [...]

すべてのアクターが同じ JVM に存在する場合、オーバーヘッドはありません。メッセージでグラフ構造への参照を渡すだけです。ただし、分散環境では、これによりグラフがシリアル化され、ワイヤ経由で送信されます (おそらく大量のデータ)。

このデータ構造をすべてのアクターで共有することを検討してください。

質問3がわかりません。

于 2012-04-13T19:48:54.063 に答える