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 akka.actor.Actor.actorOf
import akka.actor.{ Props, Actor => AkkaActor, ActorRef => AkkaActorRef, ActorSystem }
import scala.annotation.tailrec
case object Msg
......@@ -37,7 +37,7 @@ class AkkaReceiver(n: Long) extends akka.actor.Actor {
received += 1
if (received == n) {
global.latch.countDown
self.exit
context.stop(self)
}
}
}
......@@ -66,7 +66,8 @@ object MailboxPerformance {
}).start
}
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)
(new java.lang.Thread {
override def run() { for (_ <- 0 until msgs) rcvRef ! Msg }
......
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
case class Token(value: Int)
......@@ -146,16 +146,16 @@ class ThreadlessSupervisor(numMessages: Int) extends Actor {
override def act() = rcv(numMessages)
}
class AkkaWorker(supervisor: akka.actor.ActorRef) extends akka.actor.Actor {
class AkkaWorker(supervisor: AkkaActorRef) extends AkkaActor {
def receive = {
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 = {
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
var iteration = 0
var rsize = 0
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 = {
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 = {
case Token(0) =>
......@@ -182,7 +182,7 @@ class AkkaChainMaster(supervisor: akka.actor.ActorRef) extends akka.actor.Actor
{
worker ! Done
supervisor ! MasterExited
self.exit
context.stop(self)
}
case Token(value) => next ! Token(value-1)
}
......@@ -192,7 +192,7 @@ class AkkaChainMaster(supervisor: akka.actor.ActorRef) extends akka.actor.Actor
worker ! Calc(global.taskN)
next = newRing(self, rsize-1)
next ! Token(initialTokenValue)
become(initialized)
context.become(initialized)
}
}
......@@ -202,7 +202,7 @@ class AkkaSupervisor(numMessages: Int) extends akka.actor.Actor {
i += 1;
if (i == numMessages) {
global.latch.countDown
self.exit
context.stop(self)
}
}
def receive = {
......@@ -238,9 +238,10 @@ object MixedCase {
(new ThreadlessChainMaster(s)).start ! initMsg
}
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)
actorOf(new AkkaChainMaster(s)).start ! initMsg
system.actorOf(Props(new AkkaChainMaster(s))) ! initMsg
global.latch.await
}
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