scala Actor 初探
来源:互联网 发布:sql注入攻击实例 编辑:程序博客网 时间:2024/05/16 12:22
scala提供两种Actor:基于线程的Actor和基于事件的Actor。
一、基于线程的Actor
1、每个基于线程的Actor运行在自己的JVM线程中,它们被java线程调度器调度,是一个可抢占的优先级调度器。这种Actor使用receive模型,它从线程池获取一个线程后一直使用。
2、实现方法:基于线程的Actor的实现方法是继承scala.actors.Actor,完成其act方法,并通过start方法来启动它:
import scala.actors.Actorobject HiActor extends Actor { def act() { while(true) { receive { case "EXIT" => println("Exiting...");exit() case msg => println("Hello " + msg) } } }}HiActor.start // 使用start方法启动ActorHiActor ! "def"HiActor ! "EXIT"</span>
二、基于事件的Actor
1、基于事件的Actor不会为每个Actor分配线程,它们运行一个线程上。一个Actor在一个线程上运行完成后,该线程可供其它Actor使用。
2、实现方法:使用scala.actors.Actor类的actor方法来创建Actor。 Actor在定义后完成后立即启动,无须另外调用start()访求进行启动。import scala.actors._, Actor._val badActor = actor{ loop { receive { case "EXIT" => println("Exiting...");exit() case msg => System.out.println(msg) } }}badActor ! "hello scala!!" // 无须调用start方法badActor ! "EXIT"badActor ! "HI scala!!"</span>
Actor是构建在普通java线程之上的,每个actor都必须得到自己的线程,这样每个act方法才能有机会运行。但是线程会消耗内存,当许多Actor开始执行时,可能会造成内存不足。而scala为了节约线程,提供一个叫做react的方法。react带一个偏函数,scala执行完react方法后抛出异常,然后这个线程就可以被其它Actor使用。
如下是上面两个示例的react实现:import scala.actors._object SeriousActor extends Actor { def act() { loop { react { case (name:String, actor: Actor) => actor ! "Hi man!!!" case msg => println("Unhandled message: " + msg) } }}
import scala.actors._, Actor._val badActor = actor{ loop { react { case "EXIT" => println("Exiting...");exit() case msg => System.out.println(msg) } }}badActor ! "hello scala!!"badActor ! "EXIT"badActor ! "HI scala!!"
0 0
- scala Actor 初探
- scala actor
- scala Actor
- Scala actor
- Scala的线程actor
- Scala actor的使用
- scala 简要: Actor
- Scala Actor并发编程
- scala 多线程actor
- scala(8)Actor
- Scala Actor通信
- scala actor异步
- Scala Actor并发编程
- Scala入门之Actor
- Scala之Actor
- scala之actor编程
- scala中的actor
- Scala-Actor并行wordcount
- linux 光驱挂载
- 屁股不坐针,不知针尖有多深
- Java Service Wrapper
- Android源码分析-点击事件派发机制
- MPMoviePlayerController 视频播放器
- scala Actor 初探
- 第一篇 微信商城 开发前的准备工作
- 基于行为树与状态机的游戏人工智能
- 17_android_ .9.PNG图片的制作及使用
- ceph存储 LUN详解iscsi
- Linux system函数返回值
- leetcode难度及面试频率
- qt5.4.0 + opencv2.4.10
- 胡雪岩名言启示