scala 基础 5

资料 青牛 ⋅ 于 2017-11-28 16:39:44 ⋅ 最后回复由 mashang 2018-05-02 14:48:04 ⋅ 564 阅读

Actor
为什么要学习actor?
我们现在学的Scala Actor是Scala 2.10.x版本及以前版本的Actor
Scala在2.11.x版本中将Akka加入其中,作为默认的Actor,老版本的Actor已经废弃
我们学习Actor的目的就是为了学习Akka做铺垫

什么是Actor?
Actor是消息并发模型
Scala中的Actor能够实现并行编程的强大功能,它是基于事件模型的并发机制。
Scala是运用消息(message)的发送、接收来实现多线程的。
使用Scala能够更容易地实现多线程应用的开发。

Java并发编程与Scala Actor编程的区别
Scala的Actor类似于Java中的多线程编程,但是不同的是,Scala的Actor提供的模型与多线程有所不同。
Scala的Actor尽可能地避免锁和共享状态,从而避免多线程并发时出现资源争用的情况。进而提升多线程编程的性能。
此外,Scala Actor的这种模型还可以避免死锁等一系列传统多线程编程的问题。
原因就在于Java中多数使用的是可变状态的对象资源,对这些资源进行共享来实现多线程编程的话,
控制好资源竞争与防止对象状态被意外修改是非常重要的,而对象状态的不变性也是较难以保证的。
而在Scala中,我们可以通过复制不可变状态的资源(即对象,Scala中一切都是对象,连函数、方法也是)的一个副本,
再基于Actor的消息发送、接收机制进行并行编程

Actor方法执行顺序
1.调用start()方法启动Actor
2.执行act()方法
3.向Actor发送消息

发送消息的方式
! 发送异步消息,没有返回值
!? 发送同步消息,等待返回值
!! 发送异步消息,返回值是Future[Any]

Akka简介
Spark的RPC是通过Akka类库实现的,Akka用Scala语言开发,基于Actor并发模型实现
Akka具有高可靠、高性能、可扩展等特点,使用Akka可以轻松实现分布式RPC功能。
Actor是Akka中最核心的概念,它是一个封装了状态和行为的对象,Actor之间可以通过交换消息的方式进行通信
每个Actor都有自己的收件箱(MailBox)。通过Actor能够简化锁及线程管理,
可以非常容易地开发出正确地并发程序和并行系统,Actor具有如下特性:
1.提供了一种高级抽象,能够简化在并发(Concurrency)/并行(Parallelism)应用场景下的编程开发
2.提供了异步非阻塞的、高性能的事件驱动编程模型
3.超级轻量级事件处理(每GB堆内存几百万Actor)

ActorSystem
在Akka中,ActorSystem是一个重量级的结构
他需要分配多个线程,所以在实际应用中,ActorSystem通常是一个单例对象
我们可以使用这个ActorSystem创建很多Actor

Actor
在Akka中,Actor负责通信,在Actor中有一些重要的生命周期方法
1.preStart()方法:该方法在Actor对象构造方法执行后执行,整 个Actor生命周期中仅执行一次
2.receive()方法:该方法在Actor的preStart方法执行完成后执行,用于接收消息,会被反复执行

file
掌握的内容
1.创建Actor
2.Actor的消息接受和发送
3.用Actor并发编程实现WordCount
actor的简单实现

回复帖子,然后刷新页面即可查看隐藏内容

版权声明:原创作品,允许转载,转载时务必以超链接的形式表明出处和作者信息。否则将追究法律责任。来自海牛部落-青牛,http://hainiubl.com/topics/211
回复数量: 8
暂无评论~~
  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,可用Emoji的自动补全, 在输入的时候只需要 ":" 就可以自动提示了 :metal: :point_right: 表情列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif,教程
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
Ctrl+Enter