2012-04-12 5 views
15

Scalaのアクターは軽量のアクターとして記述されていますが、Akkaのアクターはさらにそうですが、明らかにそれらを使用するにはいくらかのオーバーヘッドがあります。アクターと並列化するのに適した最小の単位は何ですか?

私の質問は、アクターと並列化する価値のある最小の単位は何ですか(並列化できるとします)。潜在的な待ち時間がある場合、または重い計算のがたくさんある場合は、それだけの価値がありますか?

私は日々の仕事に簡単に当てはめることができる一般的な経験則を探しています。

EDIT:これまでの回答から、私が興味を持っているのは、おそらく実際にはの最初の質問です。だから、:

それを俳優たちと私のプログラムを構成する(だろうかさえ非俳優の実装よりも少ない開発オーバーヘッドが発生します)非常に良いフィット感であるため、余分な開発のオーバーヘッドが発生しないと仮定すると、しかし、仕事の単位パフォーマンスはかなり小さいです - アクターがパフォーマンスの面で傷つき、回避すべきポイントがありますか?

答えて

5

アクターを使用するかどうかは主に作業単位の問題ではなく、その主な利点は並行プログラムをより簡単に取得することです。これと引き換えに、異なるパラダイムに従ってソリューションをモデル化する必要があります。

したがって、パフォーマンス(または正確性のために)があるかどうか、アクターを使用するかどうかをまず決定する必要があります。後者は非常に味わいがありますが、Akka 2.0では基本的に無料でほとんどのオーバーヘッドで配布可能性(&)を得ることができます。

これ以外の方法で判断したい場合は、パフォーマンステストの目安として、目標のメッセージ処理速度が毎秒数百万を超えないようにする必要があります。

+0

興味深い点は、私は疑問に質問したかもしれないと思ったかもしれません。俳優たちは私がやりたいことのデザインを大幅に単純化しました。しかし、彼らはプログラムの構造に関して非常にうまく適合しています。作品の単位は十分に小さいので、俳優を使用して心配するとパフォーマンスに悪影響を与える可能性があります。 – Russell

+0

ネガティブエフェクトは、非常に高いメッセージレート(私が言ったように:毎秒数百万以上)が必要な場合、またはレイテンシが支配的な場合にのみ役割を果たします。俳優の方が、より簡単に時間を過ごすことができます。これは1秒あたりに多くのことを意味しますが、1つのことはもう少し長くなります。古典的なトレードオフ。 –

+0

お返事いただきありがとうございます - ご迷惑をおかけいたしますが、ご迷惑をおかけいたします。 – Russell

4

私の経験則では、日々の仕事のために、ミリ秒かかると並列化に値する可能性があります。トランザクションレートはそれよりも高くなっていますが(通常はオーバーヘッドの数十マイクロ秒ではありません)、私はオーバーヘッド支配のケースから遠ざかります。もちろん、実際にはを並列化する価値があるのは、数ミリ秒よりもはるかに長い時間がかかることがあります。より多くのコードを書く時間と、それを実行して保存した時間とのバランスをとる必要があります。

+0

は賢明なサウンド - 非常に良好な構造にフィットしたプログラム上のあなたの意見がどうなりますかアクターのために、その作業単位はミリ秒未満でしたか? – Russell

+0

@Russell - パフォーマンスが許容できる場合は、俳優を使用してください。そうでない場合は、俳優が大半の時間を取っているかどうかを判断するためにベンチマークします(たとえば、二重メッセージを送信すると考えられます)。 –

+0

お返事ありがとうございました - 残念ながら、受け入れたものとしてマークすることを選択するだけの状況です。 – Russell

0

副作用が作業単位に期待されていない場合は、実行時に作業分割のための決断をした方がよい:

protected T compute() { 
    if (r – l <= T1 || getSurplusQueuedTaskCount() >= T2) 
    return problem.solve(l, r); 
// decompose 
} 

T1 = N /(Lの*ランタイム。 getRuntime.availableProcessors())

N - 単位でワークのサイズ

L = 8..16 - 負荷率、手動

を構成

T2 = 1 ..3 - ここでは、すべてのstealings

後の作業キューの最大長は、はるかに詳細と図面とプレゼンテーションです:

http://shipilev.net/pub/talks/jeeconf-May2012-forkjoin.pdf

+0

プレゼンテーションは英語ではありません。ここに作業リンクがあります:http://shipilev.net/pub/talks/jeeconf-May2012-forkjoin.pdf – nezda

関連する問題