第5节 Actor实战:1 - 6
10.3. Actor实战
10.3.1. 第一个例子
怎么实现actor并发编程:
1、定义一个class或者是object继承Actor特质,注意导包import scala.actors.Actor
2、重写对应的act方法
3、调用Actor的start方法执行Actor
4、当act方法执行完成,整个程序运行结束
详见代码。
说明:上面分别调用了两个单例对象的start()方法,他们的act()方法会被执行,相同与在java中开启了两个线程,线程的run()方法会被执行
注意:这两个Actor是并行执行的,act()方法中的for循环执行完成后actor程序就退出了
10.3.2. 第二个例子
怎么实现actor发送、接受消息
1、定义一个class或者是object继承Actor特质,注意导包import scala.actors.Actor
2、重写对应的act方法
3、调用Actor的start方法执行Actor
4、通过不同发送消息的方式对actor发送消息
5、act方法中通过receive方法接受消息并进行相应的处理
6、act方法执行完成之后,程序退出
详见代码。
10.3.3. 第三个例子
怎么实现actor可以不断地接受消息:
在act方法中可以使用while(true)的方式,不断的接受消息。
详见代码。
说明:在act()方法中加入了while (true) 循环,就可以不停的接收消息
注意:发送start消息和stop的消息是异步的,但是Actor接收到消息执行的过程是同步的按顺序执行
10.3.4. 第四个例子
使用react方法代替receive方法去接受消息
好处:react方式会复用线程,避免频繁的线程创建、销毁和切换。比receive更高效
注意: react 如果要反复执行消息处理,react外层要用loop,不能用while
详见代码。
10.3.5. 第五个例子
结合case class样例类发送消息和接受消息
1、将消息封装在一个样例类中
2、通过匹配不同的样例类去执行不同的操作
3、Actor可以返回消息给发送方。通过sender方法向当前消息发送方返回消息
详见代码。
10.3.6. 练习实战
需求:
用actor并发编程写一个单机版的WordCount,将多个文件作为输入,计算完成后将多个任务汇总,得到最终的结果。
大致的思想步骤:
1、通过loop +react 方式去不断的接受消息
2、利用case class样例类去匹配对应的操作
3、其中scala中提供了文件读取的接口Source,通过调用其fromFile方法去获取文件内容
4、将每个文件的单词数量进行局部汇总,存放在一个ListBuffer中
5、最后将ListBuffer中的结果进行全局汇总。
详见代码。
最新文章
- 调用webapi 错误:使用 HTTP 谓词 POST 向虚拟目录发送了一个请求,而默认文档是不支持 GET 或 HEAD 以外的 HTTP 谓词的静态文件。的解决方案
- UOJ#246. 【UER #7】套路
- Android的Proxy/Delegate Application框架 (主要介绍插件化开发)
- ASP.NET MVC5---通过QueryString传值
- Buy Tickets
- 动态定义数组 .xml
- LINQ 基本子句之一 (select/where/group/into)
- mysql 存储过程中的declare 和 set @的两种变量的区别
- HibernateReview Day1 - Introduction
- python中函数的参数解析
- 讲述Sagit.Framework解决:双向引用导致的IOS内存泄漏(下)- block中任性用self
- shopkeep/spark Dockerfile示例
- Codeforces 1076D Edge Deletion(最短路树)
- RNN通俗理解
- KMP算法自我理解 和 模板
- PHP 下载中文乱码解决
- setattr
- 在Microsoft Dynamic 365/2016环境使用LinqPad查询数据(不使用linqpad Microsoft Dynamic 365 Driver)
- LJ 5月6日A组考试考试题解
- js函数事件对象
热门文章
- hadoop学习笔记(七):hadoop2.x的高可用HA(high avaliable)和联邦F(Federation)
- Fiddler修改http请求响应简单实例
- LoadRunner通过webservice协议调用WSDL接口时,返回值不正确
- HDU2444 The Accomodation of Students(二分图最大匹配)
- UVA10600 ACM Contest and Blackout
- bootstrap当中,实现div居中
- ES6-对象的简写方式
- 吴裕雄--天生自然神经网络与深度学习实战Python+Keras+TensorFlow:Bellman函数、贪心算法与增强性学习网络开发实践
- IIS反向代理配置教程(最终完整版本)
- RT_THREAD之组件学习