并发编程模型 Akka

1.Akka介绍

    Akka是JAVA虚拟机JVM平台上构建高并发、分布式和容错应用的工具包和运行时,你可以 理解成 Akka 是编写并发程序的框架。

    Akka用Scala语言写成,同时提供了Scala和JAVA的开发接口。

    Akka主要解决的问题是:可以轻松的写出高效稳定的并发程序,程序员不再过多的考虑线程、 锁和资源竞争等细节。

 

2.Akka 中 Actor  模型

    Akka 处理并发的方法基于 Actor 模型。在基于 Actor 的系统里,所有的事物都是 Actor,就好像在面向对象设计里面所有的事物都是对象一样。但是有一个重要区别,那就是 Actor 模型是作为一个并发模型设计和架构的,而面向对象模式则不是。Actor 与 Actor 之间只能通过消息通信。

 

3.Akaka的特点

    第一:它是对并发模型进行了更高的抽象;

    第二:它是异步、非阻塞、高性能的事件驱动编程模型;

    第三:它是轻量级事件处理(1GB 内存可容纳百万级别个 Actor);

 

4.为什么 Actor 模型是一种处理并发问题的解决方案?

    处理并发问题就是如何保证共享数据的一致性和正确性,为什么会有保持共享数据正确性这个问题呢?无非是我们的程序是多线程的,多个线程对同一个数据进行修改,若不加同步条件,势必会造成数据污染。那么我们是不是可以转换一下思维,用单线程去处理相应的请求,但是又有人会问了,若是用单线程处理,那系统的性能又如何保证。Actor 模型的出现解决了这个问题,简化并发编程,提升程序性能。

 

5.AKKA处理并发的方法基于 Actor 模型(如图)

说明:

  • Akka 处理并发的方法基于 Actor 模型。

  • 在基于 Actor 的系统里,所有的事物都是 Actor,就好像在面向对象设计里面所有的事物都是 对象一样。

  • Actor 模型是作为一个并发模型设计和架构的。Actor 与 Actor 之间只能通过消息通信,如图的信封。

  • Actor 与 Actor 之间只能用消息进行通信,当一个 Actor 给另外一个 Actor 发消息,消息是有顺序的(消息队列),只需要将消息投寄的相应的邮箱即可。

  • 怎么处理消息是由接收消息的 Actor 决定的,发送消息 Actor 可以等待回复,也可以异步处理。

  • ActorSystem 的职责是负责创建并管理其创建的 Actor, ActorSystem 是单例的(可以 ActorSystem 是一个工厂,专门创建 Actor),一个 JVM 进程中有一个即可,而 Acotr 是可以有多个的。

  • Actor模型是对并发模型进行了更高的抽象。

  • Actor 模型是异步、非阻塞、高性能的事件驱动编程模型。

  • Actor 模型是轻量级事件处理(1GB 内存可容纳百万级别个 Actor),因此处理大并发性能高。

 

6.Actor 模型工作机制说明

 

6.1 说明 Actor 模型的工作机制(对应上图)

  • ActorySystem创建Actor。

  • ActorRef:可以理解成是Actor的代理或者引用。消息是通过ActorRef来发送,而不能通过Actor 发送消息,通过哪个 ActorRef 发消息,就表示把该消息发给哪个 Actor。

  • 消息发送到 Dispatcher Message (消息分发器),它得到消息后,会将消息进行分发到对应的MailBox。(注: Dispatcher Message 可以理解成是一个线程池, MailBox 可以理解成是消息队列,可以缓 冲多个消息,遵守 FIFO)

  • Actor 可以通过 receive 方法来获取消息,然后进行处理。

6.2 Actor模型的消息机制(对应上图)

  • 每一个消息就是一个 Message 对象。Message 继承了 Runable, 因为 Message 就是线程类。

  • 从 Actor 模型工作机制看上去很麻烦,但是程序员编程时只需要编写 Actor 就可以了,其它的交给 Actor 模型完成即可。

  • A Actor 要给 B Actor 发送消息,那么 A Actor 要先拿到(也称为持有) B Actor 的 代理对象ActorRef 才能发送消息。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员学习圈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值