62

Akka 2.x では、 を参照するために多くのコマンドが必要ActorSystemです。したがって、アクターのインスタンスを作成するには、次のようにMyActor言えます。

val system = ActorSystem()
val myActor = system.actorOf(Props[MyActor])

:が頻繁に必要になるため、ActorSystem多くのコード例ではコードからの作成を省略し、system変数がどこから来たかを読者が知っていると想定しています。

コードが別の場所でアクターを生成する場合、このコードを複製して追加のインスタンスを作成するか、何らかのグローバルを参照するか、または渡してActorSystem同じインスタンスを共有しようとすることができます。ActorSystemActorSystem

Akka のドキュメントでは、 「アクター システム」という見出しの下にアクター システムの概要が説明されており、クラスのドキュメントがありますActorSystem。しかし、これらのいずれも、Akka のユーザーが Akka だけに頼って内部処理を行うことができない理由を説明するのにあまり役立ちません。

質問

  • 同じオブジェクトを共有しActorSystemたり、毎回新しいオブジェクトを作成したりすることの意味は何ですか?

  • ここでのベストプラクティスは何ですか? ActorSystemいつも通り過ぎるのは、意外と手ごわいようです。

  • ActorSystemに名前を付ける例もあれば、ActorSystem("MySystem")単に と呼ぶ例もありますActorSystem()。これによりどのような違いが生じますか? 同じ名前を 2 回使用するとどうなりますか?

  • コンストラクターに渡すものとakka-testkit共通のものを共有する必要がありますか?ActorSystemTestKit

4

2 に答える 2

49

ActorSystemの作成は非常にコストがかかるため、必要になるたびに新しいActorSystemを作成することは避けたいと考えています。また、アクターは、そうしない正当な理由がない限り、同じActorSystemで実行する必要があります。ActorSystemの名前は、その中で実行されるアクターへのパスの一部でもあります。たとえば、という名前のシステムでアクターを作成すると、のMySystemようなパスが作成されakka://MySystem/user/$aます。アクターのコンテキストにいる場合は、常にActorSystemへの参照があります。アクターでは、を呼び出すことができますcontext.system。akka-testkitが何を期待しているのかわかりませんが、akkaテストを見ることができます。

したがって、要約すると、そうしない正当な理由がない限り、常に同じシステムを使用する必要があります。

于 2012-05-01T12:05:18.593 に答える
4

「なぜドキュメントは常に 1 つの論理アプリケーションに対して 1 つの ActorSystem を使用することを提案するのか」を理解するのに役立つ資料を次に示します。

  1. ActorSystem の最も重い部分はディスパッチャーです。各 ActorSystem には、少なくとも 1 つがあります。ディスパッチャーは、アクターを実行させるエンジンです。実行するには、スレッドが必要です (通常はスレッド プールから取得されます)。デフォルトのディスパッチャーは、少なくとも 8 つのスレッドを持つ fork-join スレッド プールを使用します。

  2. ガーディアン アクター、イベント ストリーム、スケジューラなどの共有機能があります。ユーザー空間にあるものもあれば、内部にあるものもあります。それらはすべて作成して開始する必要があります。

  3. ほとんどの場合、コア数に合わせて構成された 1 つのスレッド プールを持つ 1 つの ActorSystem が最良の結果をもたらすはずです。

  4. ここのドキュメントでは論理的なアプリケーションについて言及していますが、私はブロッキング アプリケーションまたは非ブロッキング アプリケーションを検討することを好みます。ディスパッチャーの設定により、1 つの ActorSystem が 1 つの設定に対応します。アプリケーションが同じロジック用である場合、1 つの ActorSystem で十分です。

ここにディスカッションがあります。時間があれば、読んでください。彼らは、ActorSystem、ローカルまたはリモートなど、多くのことを議論しています。

于 2016-03-19T04:33:52.133 に答える