Actor并发模型入门
使用Scala,基于Akka的Actor并发模型。
import akka.actor.Actor import akka.actor.Props import akka.actor.ActorSystem import akka.routing.RoundRobinPool//定义一个封闭的特质 sealed trait SumTrait// 定义一个case类,混合特质SumTrait case class Result(value: Int) extends SumTrait//sealed case class Result(value:Int) // 计算用的Actor class SumActor extends Actor {val RANGE = 10000 def calculate(start: Int, end: Int, flag : String): Int = {var cal = 0 for (i <- (start to end)) {for (j <- 1 to 3000000) {}cal += i}println("flag : " + flag + ".")return cal}def receive = {//返回计算结果 case value: Int => sender ! Result( calculate((RANGE / 4) * (value - 1) + 1, (RANGE / 4) * value, value.toString) )case _ => println("未知 in SumActor...")} }// 打印结果用的Actor class PrintActor extends Actor {def receive = {case (sum: Int, startTime: Long) => println("总数为:" + sum + ";所花时间为:" + (System.nanoTime() - startTime)/1000000000.0 + "秒。")case _ => println("未知 in PrintActor...")} }// 主actor,发送计算指令给SumActor,发送打印指令给PrintActor class MasterActor extends Actor {var sum = 0 var count = 0 var startTime: Long = 0 // 声明Actor实例,nrOfInstances是pool里所启routee(SumActor)的数量, // 这里用4个SumActor来同时计算,很Powerful。 val sumActor = context.actorOf( Props[SumActor].withRouter( RoundRobinPool(nrOfInstances = 4) ), name = "sumActor" )val printActor = context.actorOf(Props[PrintActor], name = "printActor")def receive = {//常量模式匹配 case "calculate..." =>startTime = System.nanoTime()for (i <- 1 to 4) sumActor ! i//构造器模式匹配 case Result(value) =>sum += valuecount += 1 if (count == 4) {printActor ! (sum, startTime)context.stop(self)}case _ => println("未知 in MasterActor...")} }object Sum {def main(args: Array[String]): Unit = {var sum = 0 val system = ActorSystem("MasterActorSystem")val masterActor = system.actorOf(Props[MasterActor], name = "masterActor")masterActor ! "calculate..." //Thread.sleep(5000) } }
源代码工程
https://github.com/chenhaifeng2016/AkkaActorDemo
下次会发布Akk Remote和Akka Cluster的例子。
Actor并发模型入门相关推荐
- 共享内存 Actor并发模型到底哪个快?
HI,前几天被.NET圈纪检委@懒得勤快问到共享内存和Actor并发模型哪个速度更快. 前文传送门:<三分钟掌握共享内存 & Actor并发模型> 说实在,我内心10w头羊驼跑过. ...
- 浅谈Actor并发模型
目录 0x00 Actor出现的背景 0x01 Actor如何通过消息传递避免数据竞争? 0x02 Actor到底是什么? 0x03 Actor特性 0x031 容错 0 ...
- Scala Actor并发编程入门示例
代码 package cn.zxl.actorimport akka.actor.{Actor, ActorRef, ActorSystem, Props}/*** @description:* @a ...
- Golang并发模型:轻松入门协程池
goroutine是非常轻量的,不会暂用太多资源,基本上有多少任务,我们可以开多少goroutine去处理.但有时候,我们还是想控制一下. 比如,我们有A.B两类工作,不想把太多资源花费在B类务上,而 ...
- Golang并发模型:轻松入门流水线FAN模式
前一篇文章<Golang并发模型:轻松入门流水线模型>,介绍了流水线模型的概念,这篇文章是流水线模型进阶,介绍FAN-IN和FAN-OUT,FAN模式可以让我们的流水线模型更好的利用Gol ...
- 如何在golang中关闭bufio.reader_Golang 并发模型系列:1. 轻松入门流水线模型
Go语言中文网,致力于每日分享编码.开源等知识,欢迎关注我,会有意想不到的收获! Golang作为一个实用主义的编程语言,非常注重性能,在语言特性上天然支持并发,它有多种并发模型,通过流水线模型系列文 ...
- blp模型 上读下写_Golang 并发模型系列:1. 轻松入门流水线模型
Go语言中文网,致力于每日分享编码.开源等知识,欢迎关注我,会有意想不到的收获! Golang作为一个实用主义的编程语言,非常注重性能,在语言特性上天然支持并发,它有多种并发模型,通过流水线模型系列文 ...
- Java 并发/多线程教程(四)-并发模型
本系列译自jakob jenkov的Java并发多线程教程(本章节部分内容参考http://ifeve.com/并发编程模型),个人觉得很有收获.由于个人水平有限,不对之处还望矫正! 并发系统可以有多 ...
- java actor akka_Actor 模型及Akka简介
Actor 模型 Actor 的基础就是消息传递,一个 Actor 可以认为是一个基本的计算单元,它能接收消息并基于其执行运算,它也可以发送消息给其他 Actor.Actors 之间相互隔离,它们之间 ...
最新文章
- [Unity3d]制作打包并载入AssetBundle
- 刚刚更新:在线聊天系统设计(原理+思路+源码+效果图)
- c语言计算坐标三角形面积公式,c语言计算三角形面积代码
- verilog数字跑表设计实现与仿真
- linux中memcpy实现分析,ARM64 的 memcpy 优化与实现
- spring security:第一个程序
- Angular.js为什么如此火呢?
- linux 误删除mysql表能恢复吗_linux rm误删除数据库文件的恢复方法
- Java long传到前台精度损失解决方案
- 专注于钢铁行业电子商务的服务网站,钢铁行业的网上贸易市场 一起成长
- 浅析C#中的文件操作
- 向上滚动的文字的淡入淡出效果
- java如何解压rar文件怎么打开_java解压RAR压缩文件
- C++求球的面积与体积,公式一样输出结果不一样?
- Android 设置Switch样式
- Cannot construct instance of `com.baomidou.mybatisplus.core.metadata.IPage`
- 什么软件质量/如何评价软件的质量
- python滑块验证码
- 十七、网上商城项目(3)
- 光立方原理讲解_基于杠杆平衡的防汛挡水板设计原理分析