akka同時通信、actorモデルの理解

1151 ワード

1、akkaによるマルチノード分散通信
val ROLE="follower"
//      
val config=ConfigFactory.load("Actors.conf");
//  ActorSystem,      ,      actor          
val actorSystem=ActorSystem("Megalith",config.getConfig(ROLE))
val Follower=actorSystem.actorOf(Props(new Follower()),ROLE)
//   
Follower ! "start"
actorSystem.awaitTermination()

// actor Megalith             role actor,    actor   
val actor=context.actorSelection(s"akka.tcp://Megalith@$IP:$Port/user/"+role)
//        caseclass,  caseclass    Serializable
actor ! MyCaseClass(1,2,3)

2、actorモデルの特徴
  • actorごとに1つのスレッド
  • を独占する
  • 各actorのデータは自己メンテナンスされ、他のactorによって
  • 変更されない.
  • actorが受信したメッセージはいずれもFIFOのメールボックスに存在し,onReceive()処理を順次使用する.
  • actorが他のactorに送信情報は、通常、非同期非ブロックの
  • である.
    3、actorモデルとマルチスレッドモデルの違い
    共通点:actorモデルでは、各actorもスレッドを独占し、独立してタスクを実行できます.
    コアの違い:
  • actorモデル:スレッド間で非同期メッセージを送信することによって通信
  • マルチスレッドモデル:スレッド間でプライマリスレッドを介して伝達される共有オブジェクト通信
  • .
    マルチスレッドの通信媒体のデータは共有されている(スタックメモリの領域)ため、ロックの問題があり、マルチスレッドは同じプロセスにある必要があります.
    actorのデータはそれぞれ独自であるため、異なるプロセスや異なるサーバに分散することができ、分散ジョブを実現することができます.