使用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并发模型入门相关推荐

  1. 共享内存 Actor并发模型到底哪个快?

    HI,前几天被.NET圈纪检委@懒得勤快问到共享内存和Actor并发模型哪个速度更快. 前文传送门:<三分钟掌握共享内存 & Actor并发模型> 说实在,我内心10w头羊驼跑过. ...

  2. 浅谈Actor并发模型

    目录 0x00    Actor出现的背景 0x01    Actor如何通过消息传递避免数据竞争? 0x02    Actor到底是什么? 0x03    Actor特性 0x031    容错 0 ...

  3. Scala Actor并发编程入门示例

    代码 package cn.zxl.actorimport akka.actor.{Actor, ActorRef, ActorSystem, Props}/*** @description:* @a ...

  4. Golang并发模型:轻松入门协程池

    goroutine是非常轻量的,不会暂用太多资源,基本上有多少任务,我们可以开多少goroutine去处理.但有时候,我们还是想控制一下. 比如,我们有A.B两类工作,不想把太多资源花费在B类务上,而 ...

  5. Golang并发模型:轻松入门流水线FAN模式

    前一篇文章<Golang并发模型:轻松入门流水线模型>,介绍了流水线模型的概念,这篇文章是流水线模型进阶,介绍FAN-IN和FAN-OUT,FAN模式可以让我们的流水线模型更好的利用Gol ...

  6. 如何在golang中关闭bufio.reader_Golang 并发模型系列:1. 轻松入门流水线模型

    Go语言中文网,致力于每日分享编码.开源等知识,欢迎关注我,会有意想不到的收获! Golang作为一个实用主义的编程语言,非常注重性能,在语言特性上天然支持并发,它有多种并发模型,通过流水线模型系列文 ...

  7. blp模型 上读下写_Golang 并发模型系列:1. 轻松入门流水线模型

    Go语言中文网,致力于每日分享编码.开源等知识,欢迎关注我,会有意想不到的收获! Golang作为一个实用主义的编程语言,非常注重性能,在语言特性上天然支持并发,它有多种并发模型,通过流水线模型系列文 ...

  8. Java 并发/多线程教程(四)-并发模型

    本系列译自jakob jenkov的Java并发多线程教程(本章节部分内容参考http://ifeve.com/并发编程模型),个人觉得很有收获.由于个人水平有限,不对之处还望矫正! 并发系统可以有多 ...

  9. java actor akka_Actor 模型及Akka简介

    Actor 模型 Actor 的基础就是消息传递,一个 Actor 可以认为是一个基本的计算单元,它能接收消息并基于其执行运算,它也可以发送消息给其他 Actor.Actors 之间相互隔离,它们之间 ...

最新文章

  1. [Unity3d]制作打包并载入AssetBundle
  2. 刚刚更新:在线聊天系统设计(原理+思路+源码+效果图)
  3. c语言计算坐标三角形面积公式,c语言计算三角形面积代码
  4. verilog数字跑表设计实现与仿真
  5. linux中memcpy实现分析,ARM64 的 memcpy 优化与实现
  6. spring security:第一个程序
  7. Angular.js为什么如此火呢?
  8. linux 误删除mysql表能恢复吗_linux rm误删除数据库文件的恢复方法
  9. Java long传到前台精度损失解决方案
  10. 专注于钢铁行业电子商务的服务网站,钢铁行业的网上贸易市场 一起成长
  11. 浅析C#中的文件操作
  12. 向上滚动的文字的淡入淡出效果
  13. java如何解压rar文件怎么打开_java解压RAR压缩文件
  14. C++求球的面积与体积,公式一样输出结果不一样?
  15. Android 设置Switch样式
  16. Cannot construct instance of `com.baomidou.mybatisplus.core.metadata.IPage`
  17. 什么软件质量/如何评价软件的质量
  18. python滑块验证码
  19. 十七、网上商城项目(3)
  20. 光立方原理讲解_基于杠杆平衡的防汛挡水板设计原理分析

热门文章

  1. ORACLE开发:创建与管理表空间和数据文件1
  2. ASP封裝OWC CLASS
  3. tourist取模模板
  4. SPOJ - BALNUM Balanced Numbers(数位dp+进制转换)
  5. Dominant Indices(CF 1009 F)
  6. Lua 文件 I/O
  7. 一个DDOS病毒的分析(一)
  8. 字符串匹配算法(三):KMP(KnuthMorrisPratt)算法
  9. 在鹅厂做了14年开发
  10. 2019 年 8 月编程语言排行榜,Java涨幅不行!