生活随笔
收集整理的這篇文章主要介紹了
Actor并发模型入门
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
使用Scala,基于Akka的Actor并發(fā)模型。
import akka.actor.Actor
import akka.actor.Props
import akka.actor.ActorSystem
import akka.routing.RoundRobinPool
//定義一個(gè)封閉的特質(zhì)
sealed trait SumTrait
// 定義一個(gè)case類,混合特質(zhì)SumTrait
case class Result(value: Int)
extends SumTrait
//sealed case class Result(value:Int)
// 計(jì)算用的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 = {
//返回計(jì)算結(jié)果
case value: Int => sender !
Result( calculate((
RANGE /
4) * (value -
1) +
1, (
RANGE /
4) * value, value.toString) )
case _ =>
println(
"未知 in SumActor...")}
}
// 打印結(jié)果用的Actor
class PrintActor
extends Actor {
def receive = {
case (sum: Int, startTime: Long) =>
println(
"總數(shù)為:" + sum +
";所花時(shí)間為:" + (System.
nanoTime() - startTime)/
1000000000.0 +
"秒。")
case _ =>
println(
"未知 in PrintActor...")}
}
// 主actor,發(fā)送計(jì)算指令給SumActor,發(fā)送打印指令給PrintActor
class MasterActor
extends Actor {
var sum =
0
var count =
0
var startTime: Long =
0
// 聲明Actor實(shí)例,nrOfInstances是pool里所啟routee(SumActor)的數(shù)量,
// 這里用4個(gè)SumActor來同時(shí)計(jì)算,很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
//構(gòu)造器模式匹配
case Result(value) =>
sum += value
count +=
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
下次會(huì)發(fā)布Akk Remote和Akka Cluster的例子。
總結(jié)
以上是生活随笔為你收集整理的Actor并发模型入门的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。