|
Akka/Scala example source code file (Bench.scala)
The Bench.scala Akka example source code/* The Computer Language Benchmarks Game http://shootout.alioth.debian.org/ contributed by Julien Gaugaz inspired by the version contributed by Yura Taras and modified by Isaac Gouy */ package akka.actor object Chameneos { sealed trait ChameneosEvent final case class Meet(from: ActorRef, colour: Colour) extends ChameneosEvent final case class Change(colour: Colour) extends ChameneosEvent final case class MeetingCount(count: Int) extends ChameneosEvent case object Exit extends ChameneosEvent abstract class Colour case object RED extends Colour case object YELLOW extends Colour case object BLUE extends Colour case object FADED extends Colour val colours = Array[Colour](BLUE, RED, YELLOW) var start = 0L var end = 0L class Chameneo(var mall: ActorRef, var colour: Colour, cid: Int) extends Actor { var meetings = 0 mall ! Meet(self, colour) def receive = { case Meet(from, otherColour) ⇒ colour = complement(otherColour) meetings = meetings + 1 from ! Change(colour) mall ! Meet(self, colour) case Change(newColour) ⇒ colour = newColour meetings = meetings + 1 mall ! Meet(self, colour) case Exit ⇒ colour = FADED sender() ! MeetingCount(meetings) } def complement(otherColour: Colour): Colour = colour match { case RED ⇒ otherColour match { case RED ⇒ RED case YELLOW ⇒ BLUE case BLUE ⇒ YELLOW case FADED ⇒ FADED } case YELLOW ⇒ otherColour match { case RED ⇒ BLUE case YELLOW ⇒ YELLOW case BLUE ⇒ RED case FADED ⇒ FADED } case BLUE ⇒ otherColour match { case RED ⇒ YELLOW case YELLOW ⇒ RED case BLUE ⇒ BLUE case FADED ⇒ FADED } case FADED ⇒ FADED } override def toString = cid + "(" + colour + ")" } class Mall(var n: Int, numChameneos: Int) extends Actor { var waitingChameneo: Option[ActorRef] = None var sumMeetings = 0 var numFaded = 0 override def preStart() = { for (i ← 0 until numChameneos) context.actorOf(Props(new Chameneo(self, colours(i % 3), i))) } def receive = { case MeetingCount(i) ⇒ numFaded += 1 sumMeetings += i if (numFaded == numChameneos) { Chameneos.end = System.currentTimeMillis context.stop(self) } case msg @ Meet(a, c) ⇒ if (n > 0) { waitingChameneo match { case Some(chameneo) ⇒ n -= 1 chameneo ! msg waitingChameneo = None case None ⇒ waitingChameneo = Some(sender()) } } else { waitingChameneo.foreach(_ ! Exit) sender() ! Exit } } } def run(): Unit = { // System.setProperty("akka.config", "akka.conf") Chameneos.start = System.currentTimeMillis val system = ActorSystem() val actor = system.actorOf(Props(new Mall(1000000, 4))) Thread.sleep(10000) println("Elapsed: " + (end - start)) system.shutdown() } def main(args: Array[String]): Unit = run() } Other Akka source code examplesHere is a short list of links related to this Akka Bench.scala source code file: |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.