生活随笔
收集整理的這篇文章主要介紹了
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 += 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
下次會發布Akk Remote和Akka Cluster的例子。
總結
以上是生活随笔為你收集整理的Actor并发模型入门的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。