akka并发通信、actor模型的理解

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独占一个线程
  • 每个actor的数据都由自己维护,不被其他actor修改
  • actor收到的消息都会存在FIFO的邮箱中,依次使用onReceive()处理。
  • actor向其他actor发送信息通常是异步非阻塞的

3、actor模型与多线程模型的区别

共同点:actor模型中,每个actor也是独占一个线程,可以独立执行任务

核心区别:

  • actor模型:线程间通过发送异步消息进行通信
  • 多线程模型:线程间通过主线程传入的共享对象通信

由于多线程的通信媒介的数据是共享的(堆内存的一片区域),因此会有锁的问题,且多线程必须在同一进程中。

而actor的数据都是各自独有的,因此可以分布在不同进程甚至不同服务器上,从而真正实现分布式作业。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值