码迷,mamicode.com
首页 > 其他好文 > 详细

[Akka基础系列 01]Akka之HelloWord

时间:2015-08-07 13:02:31      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:

scala自从2.10开始,则直接采用akka作为并发模型,本文作为akka的第一个入门实例。

1.Akka入门实例

package com.tv189.actor

import akka.actor.{Actor, ActorSystem, Props}

/**
 * Created by molyeo on 2015/8/6.
 */
object AkkaTest01 extends App {
  val system = ActorSystem("AkkaTest")
  val helloActor = system.actorOf(Props[HelloActor], name = "helloActor")
  helloActor ! "hello"
  helloActor ! "yes"

  class HelloActor extends Actor {
    def receive = {
      case "hello" => println("hello back to you")
      case _ => println("huh?")
    }
  }

}

运行结果如下:

hello back to you
huh?
  •  首先通过继承Actor创建HelloActor,并重写receive方法
  • 定义ActorSystem
  • 通过actorOf方法得到具体的Actor实例helloActor
  • 调用!方法发送消息

 

2.Actor模型

2.1.Actor模型的要点

  • 基于Actor的系统中 Actor是最小的抽象单元,  就像object 之于 oop
  • 一个Actor封装了状态和行为
  • 外界不能进入Actor以获取其状态、字段、执行方法,和Actor的交互只能通过message
  • 一个Actor有一个信箱mailbox,将外部发送来的消息msg存到队列中
  • Actor的终生就是在等待msg,并依次取出mailbox中的消息进行处理

2.2.Actor模型的组织观

  • 将Actor系统视为一个公司,从上到下有严格的层级关系,公司中员工是person,也是actor
  • 一个Actor仅有一个上级主管 称为 supervisor,就是create这个Actor的 那个Actor
  • 一个Actor可能有多个下属小兵,真正干着脏累差活的actor
  • 一个Actor可能有多个同级的兄弟部门actor

2.3.开发actor系统的关键

  • 委托 委托 委托!!! 以做的更多!
  • 公司老总不能事无巨细全部承担,他的主要工作就是分配公司工作和监督
  • 各部门主管收到任务,要么自己干,要么再细分任务,然后分配到自己的下属手中并监督
  • 如果公司还有更多的层级,则继续上面这个主管的龌龊勾当
  • 最底层的员工收到细粒度任务,干着自己最擅长的事情

2.4.Actor的失效处理

  • 人无完人,Actor也不可能100%完成任务
  • 如果任务执行失败,一个Actor会挂起自己及其下属,然后发消息告诉其上级主管“我失败了”!
  • 上级主管收到下属的“失败”消息时,可以有如下反应:
    1. 失败就失败,就这样吧,没太大关系:保持当前状态,恢复Actor,继续工作
    2. 没成功啊,那重新做一遍吧             :重置状态,重启该Actor
    3. 没机会了,失败了你就滚!解雇下属:关闭 终结 该 Actor
    4. 这事我也决定不了,我请示我的上级:向上级Actor报告

3.Akka实现的Actor模型的一些附加特性

  • 实例化一个Actor时,返回一个ActorRef,相当于 邮箱地址,并不能通过这个获取Actor的状态信息
  • Actor模型是线程的更高层抽象,最终是跑在java的线程中的
  • 多个Actor可能共享一个线程,这是由akka保障的
  • Actor的信箱有多种实现方式:无限变量信箱    有限信箱    带优先级信箱, 还可以自定义实现
  • akka没有让Actor扫描信箱的message
  • 一个Actor终结(无论是正常还是非常的)它的信箱中的msg进入akka系统的“死信箱dead letter mailbox”中

 

参考文献:

http://alvinalexander.com/scala/simple-scala-akka-actor-examples-hello-world-actors

[Akka基础系列 01]Akka之HelloWord

标签:

原文地址:http://www.cnblogs.com/molyeo/p/4710285.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!