Akka简单介绍

一、为什么当代系统需要新的编程模型

  1. 对象只能在单线程的条件下保持封装性,多线程往往会导致内部状态的破坏。每一个不变性都可能会被两个竞争的线程破坏。
  2. 锁是低效的,而且还会带来死锁这一问题。
  3. 锁主要是本地使用的,集群化使用,会有限制。
  4. 多线程下数据可见性是一个不好处理的事情,什么情况下用volatile,什么情况下不用,比较难掌握。
  5. 多线程下异常捕获复杂,错误恢复复杂。

二、Actor

  1. 通过消息交互,返回值也通过消息返回。

  2. 不存在锁的情况,因为只有通过消息才可以修改actor的状态,由于只是用来调度actor,所以有可以有数百万个actor存在。

  3. 通过消息来传递错误,错误是领域中的一部分。

  4. akka是通过树形结构组织actor的,所以会有父子actor存在,父actor是子actor的监督者,可以停止和关停子actor,子actor不可以自己关停自己。

  5. 如果想让任务拆分的更细致,可以创建子actor;一个actor要处理多个任务,可以把任务拆分成单独的子任务然后创建子actor。
    Akka

  6. 一个actor system内的actor共享调度服务、配置信息、以及日志处理,一般情况下一个jvm创建一个actor system就可以了,当然创建多个也没问题。

  7. actor之间传递的变量最好是不可变的,可用不可变消息来实现;

  8. Akka actor执行方式:
    Akka

三、简单示例

  1. actors
    1.1. Greeter:

    • 命令:接受向别人Greet的命令;
    • 响应:通过Greeted确认greeting已经发生过了;

    1.2. GreeterBot:接受Greeter的响应,发送额外greeting msg的数量以及收集响应直到消息数量达到最大值;
    1.3. GreeterMain:启动的actor;

  2. 使用actor模型的好处
    2.1. 事件驱动模型:actor直接通过发送消息来进行沟通,actor之间的同学是异步的,不需要block等待响应;
    2.2. 强隔离策略:actors没有提供像java object那样的api去访问object的属性和方法,actor访问另一个actor的状态数据,必须通过发送消息类进行。
    2.3. 位置透明的:系统是通过factory创建的actor返回的是actor的实例引用。所以可以在任何地方启动、停止、重启以进行扩展和伸缩;
    2.4. 轻量级的:每个actor实例只包含几百字节的数据,一个app可以包含数百万个actor;

  3. 消息
    3.1. Greet:发送给Greeter actor去做greet的命令;
    3.2. Greeted:来自于Greeter的响应,已确认greeting发生过;
    3.3. SayHello:命令GreeterMain启动greeting流程;

  4. 整体结构
    Akka

  5. 实例源码:https://developer.lightbend.com/guides/akka-quickstart-java/

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值