• Scala --Actor通信模型概述


    1. Actor通信模型总结

    1)  Actor模型中使用了Akka协议信息传输。

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

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

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

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

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

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

    8)  Actor 模型是异步、非阻塞、高性能的事件驱动编程模型。9)  Actor 模型是轻量级事件处理(1GB  内存可容纳百万级别个 Actor),因此处理大并发性能高.

     2. ActorSystem的层次结构

     

    1)  ActorySystem 创建 Actor

    2)  ActorRef:可以理解成是 Actor 的代理或者引用。消息是通过 ActorRef 来发送,而不能通过 Actor  发

    送消息,通过哪个 ActorRef  发消息,就表示把该消息发给哪个 Actor

    3)  消息发送到 Dispatcher Message (消息分发器),它得到消息后,会将消息进行分发到对应的

    MailBox。(注: Dispatcher Message  可以理解成是一个线程池, MailBox  可以理解成是消息队列,可以缓

    冲多个消息,遵守 FIFO)

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

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

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

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

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

     

    3. 什么是ActorPath

    What is an Actor Path?

    由于Actor是以严格的分层方式创建的,因此存在一个独特的Actor名称序列,通过递归地跟随子和父母之间的监督链接向下朝向Actor系统的根来给出。此序列可以看作是文件系统中的文件夹,因此我们采用名称“path”来引用它,尽管actor层次结构与文件系统层次结构有一些根本区别。

    一个actor路径包含一个anchor,它标识了actor系统,然后是路径元素的串联,从根守护者到指定的actor;path元素是遍历的actor的名称,并用斜杠分隔。

     4. 如何查找Actor Reference?如何创建Actor Reference

    Actor Reference是ActorRef的的子类型,ActorRef的主要作用是支持向它所代表的Actor发送消息。

    每个actor都可以通过self来访问它的规范(本地)引用,默认情况下,

    此引用也被作为给其他Actor发送消息的发件人使用。

    在消息处理期间,Actor可以通过访问sender字段获取消息发送方的引用。

     5. Scala中的隐式转换

    Scala中使用implicit修饰的变量,方法,类支持隐式转换

    当对象调用所在类中不存在的方法或成员时,编译器会自动将对象进行隐式转换(根据类型)

    使用implicit修饰的变量,可以在方法需要参数时,编辑器自动加载到方法参数中

    隐式转换函数是以 implicit 关键字声明的带有单个参数的函数。这种函数将会自动应用,将值从一种类型转换为另一种类型

    1)  隐式转换函数的函数名可以是任意的,隐式转换与函数名称无关,只与函数签名(函数参数类

    型和返回值类型)有关。

    2)  隐式函数可以有多个(即:隐式函数列表),但是需要保证在当前环境下,只有一个隐式函数能

    被识别

    隐式类使用有如下几个特点:

    1) 隐式类的构造参数有且只能有一个

    2)  隐式类必须被定义在“类”或“伴生对象”或“包对象”里,即隐式类不能是顶级的(top-level objects)。

    3)  隐式类不能是 case class

    4)  作用域内不能有与之相同名称的标识符

  • 相关阅读:
    iOS开发UI篇—CAlayer简介
    iOS开发UI篇—ios手势识别(双击、捏、旋转、拖动、划动、长按, 上下左右滑动)
    录屏专家
    加载Gif图片方法
    制作酸奶方法
    UITabBar小红点(适配iPad)
    那些著名或非著名的iOS面试题-后编
    iOS学习资源
    实用的Mac软件
    安装iOS企业包流程
  • 原文地址:https://www.cnblogs.com/eric666666/p/11203479.html
Copyright © 2020-2023  润新知