6. Actor Erlang Scala
Erlang Scala Actor
• Erlang
• Erlang VM Actor
•
• Scala
• Actor JVM
• actor
7. Actor - Actor
Actor
• Actors
actor ! ChangeYourPosition
Pid ! change_your_position
• Actors
val a = actor { loop(I) ->
def loop(i: Int): Unit = receive
react { I -> I, loop(I + 1);
case i: Int => loop(i + 1) exit -> io:format(“~p~n”, [I])
case Exit => println(i) end
} end
loop(0) Pid = spawn(fun loop/1, [0])
}
•
• Actor
• loop (Scala Erlang) (Scala)
• Actors
8. Actor
Actor OO
•
• OO
• Actor
• (immutable)
•
•
• Actor
• Actor
Actor
• Actor
Actor Actor
13. Scala JVM Actor
Scheduler
• Actor Object
• Actor
• Actor
• Actor
Actor
• Actors Actors
• Scala IO
IO Actor
14. Erlang Actor Process
Scheduler
• Erlang Actor Process
• Process
• Process
• Process
• Erlang IO Process
IO
15. • Actor
Actors Actor
•
sleep IO
•
Scala Actor NIO
16. Erlang vs Scala –
• Erlang Process
• Process
• Process
• Process CPU
Process
• log
2-core 140 process 200 process
CPU 1 / 200 * 2 Core = 1%
8-core 700 process 980 process
CPU 1 / 980 * 8 Core = 0.82%
17. Erlang vs Scala –
• Scala Actor
• Actor
Actors
•
Actor
•
• Actor
18. Erlang vs Scala –
• Erlang Process
•
• (GC )
• ( )
• VM (
)
•
• ( )
19. Erlang vs Scala –
• Scala Actor
Erlang
•
•
• VM VM
•
• JVM
•
20. Erlang vs Scala –
object ThreadRing {
val (nTokens, nProcs) = (20000, 10000)
def main(args: Array[String]) {
val last= Ring(null, 1)
val h = Range(nProcs, 2, -1).foldLeft(last){(acc, i) => Ring(acc, i)}
last.next = h
h ! nTokens
}
case class Ring(var next: Ring, id: Int) extends Actor {
start
def act = loop {
react {
case 1 =>
println("Done")
println(id)
System.exit(0)
case token: Int =>
next ! token - 1
println(token)
//fib(N_FIB)
}
}
}
}