Commit eca4081b authored by neverlord's avatar neverlord

ported scala benchmark to akka >= 2.0

parent 04dac9d4
import scala.actors.Actor import scala.actors.Actor
import scala.actors.Actor._ import scala.actors.Actor._
import akka.actor.Actor.actorOf import akka.actor.{ Props, Actor => AkkaActor, ActorRef => AkkaActorRef, ActorSystem }
import scala.annotation.tailrec import scala.annotation.tailrec
case object Msg case object Msg
...@@ -37,7 +37,7 @@ class AkkaReceiver(n: Long) extends akka.actor.Actor { ...@@ -37,7 +37,7 @@ class AkkaReceiver(n: Long) extends akka.actor.Actor {
received += 1 received += 1
if (received == n) { if (received == n) {
global.latch.countDown global.latch.countDown
self.exit context.stop(self)
} }
} }
} }
...@@ -66,7 +66,8 @@ object MailboxPerformance { ...@@ -66,7 +66,8 @@ object MailboxPerformance {
}).start }).start
} }
else { else {
val rcvRef = actorOf(new AkkaReceiver(threads*msgs)).start val system = ActorSystem()
val rcvRef = system.actorOf(Props(new AkkaReceiver(threads*msgs)))
for (i <- 0 until threads) for (i <- 0 until threads)
(new java.lang.Thread { (new java.lang.Thread {
override def run() { for (_ <- 0 until msgs) rcvRef ! Msg } override def run() { for (_ <- 0 until msgs) rcvRef ! Msg }
......
import scala.actors.Actor import scala.actors.Actor
import scala.actors.Actor._ import scala.actors.Actor._
import akka.actor.Actor.actorOf import akka.actor.{ Props, Actor => AkkaActor, ActorRef => AkkaActorRef, ActorSystem }
import scala.annotation.tailrec import scala.annotation.tailrec
case class Token(value: Int) case class Token(value: Int)
...@@ -146,16 +146,16 @@ class ThreadlessSupervisor(numMessages: Int) extends Actor { ...@@ -146,16 +146,16 @@ class ThreadlessSupervisor(numMessages: Int) extends Actor {
override def act() = rcv(numMessages) override def act() = rcv(numMessages)
} }
class AkkaWorker(supervisor: akka.actor.ActorRef) extends akka.actor.Actor { class AkkaWorker(supervisor: AkkaActorRef) extends AkkaActor {
def receive = { def receive = {
case Calc(value) => supervisor ! Factors(global.factorize(value)) case Calc(value) => supervisor ! Factors(global.factorize(value))
case Done => self.exit case Done => context.stop(self)
} }
} }
class AkkaChainLink(next: akka.actor.ActorRef) extends akka.actor.Actor { class AkkaChainLink(next: AkkaActorRef) extends AkkaActor {
def receive = { def receive = {
case Token(value) => next ! Token(value); if (value == 0) self.exit case Token(value) => next ! Token(value); if (value == 0) context.stop(self)
} }
} }
...@@ -165,10 +165,10 @@ class AkkaChainMaster(supervisor: akka.actor.ActorRef) extends akka.actor.Actor ...@@ -165,10 +165,10 @@ class AkkaChainMaster(supervisor: akka.actor.ActorRef) extends akka.actor.Actor
var iteration = 0 var iteration = 0
var rsize = 0 var rsize = 0
var next: akka.actor.ActorRef = null var next: akka.actor.ActorRef = null
val worker = actorOf(new AkkaWorker(supervisor)).start val worker = context.actorOf(Props(new AkkaWorker(supervisor)))
@tailrec final def newRing(next: akka.actor.ActorRef, rsize: Int): akka.actor.ActorRef = { @tailrec final def newRing(next: akka.actor.ActorRef, rsize: Int): akka.actor.ActorRef = {
if (rsize == 0) next if (rsize == 0) next
else newRing(actorOf(new AkkaChainLink(next)).start, rsize-1) else newRing(context.actorOf(Props(new AkkaChainLink(next))), rsize-1)
} }
def initialized: Receive = { def initialized: Receive = {
case Token(0) => case Token(0) =>
...@@ -182,7 +182,7 @@ class AkkaChainMaster(supervisor: akka.actor.ActorRef) extends akka.actor.Actor ...@@ -182,7 +182,7 @@ class AkkaChainMaster(supervisor: akka.actor.ActorRef) extends akka.actor.Actor
{ {
worker ! Done worker ! Done
supervisor ! MasterExited supervisor ! MasterExited
self.exit context.stop(self)
} }
case Token(value) => next ! Token(value-1) case Token(value) => next ! Token(value-1)
} }
...@@ -192,7 +192,7 @@ class AkkaChainMaster(supervisor: akka.actor.ActorRef) extends akka.actor.Actor ...@@ -192,7 +192,7 @@ class AkkaChainMaster(supervisor: akka.actor.ActorRef) extends akka.actor.Actor
worker ! Calc(global.taskN) worker ! Calc(global.taskN)
next = newRing(self, rsize-1) next = newRing(self, rsize-1)
next ! Token(initialTokenValue) next ! Token(initialTokenValue)
become(initialized) context.become(initialized)
} }
} }
...@@ -202,7 +202,7 @@ class AkkaSupervisor(numMessages: Int) extends akka.actor.Actor { ...@@ -202,7 +202,7 @@ class AkkaSupervisor(numMessages: Int) extends akka.actor.Actor {
i += 1; i += 1;
if (i == numMessages) { if (i == numMessages) {
global.latch.countDown global.latch.countDown
self.exit context.stop(self)
} }
} }
def receive = { def receive = {
...@@ -238,9 +238,10 @@ object MixedCase { ...@@ -238,9 +238,10 @@ object MixedCase {
(new ThreadlessChainMaster(s)).start ! initMsg (new ThreadlessChainMaster(s)).start ! initMsg
} }
else if (impl == "akka") { else if (impl == "akka") {
val s = actorOf(new AkkaSupervisor(numMessages)).start val system = ActorSystem();
val s = system.actorOf(Props(new AkkaSupervisor(numMessages)))
for (_ <- 0 until numRings) for (_ <- 0 until numRings)
actorOf(new AkkaChainMaster(s)).start ! initMsg system.actorOf(Props(new AkkaChainMaster(s))) ! initMsg
global.latch.await global.latch.await
} }
else usage else usage
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment