zoukankan      html  css  js  c++  java
  • 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)  作用域内不能有与之相同名称的标识符

  • 相关阅读:
    Eclipse快捷键 10个最有用的快捷键
    28000是 the account is lock
    MVN 打包命令
    增加eclipse启动的Tomcat内存的方法
    Ubuntu 12.04 简单实用的快捷键
    linux zip
    oracle 删除已连接用户
    eclipse下svn的分支与合并操作
    spring xml 配置文件向Bean 设置List值
    如何添加或删除ubuntu用户和组
  • 原文地址:https://www.cnblogs.com/eric666666/p/11203479.html
Copyright © 2011-2022 走看看