Advertisement
nlw

Quicksort using Akka actors

nlw
Apr 5th, 2015
277
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 1.20 KB | None | 0 0
  1. import akka.actor.{ActorSystem, Props, Actor, Inbox}
  2. import akka.pattern.{ask, pipe}
  3. import akka.util.Timeout
  4. import scala.concurrent.duration._
  5. import scala.concurrent._
  6.  
  7. import scala.concurrent.ExecutionContext.Implicits.global
  8.  
  9.  
  10. // import scala.concurrent.duration._
  11.  
  12. case class QSTask(data: Vector[Int])
  13.  
  14. class QuicksortActor extends Actor {
  15.   val qsAct = context.self
  16.   implicit val timeout = Timeout(5.seconds)
  17.  
  18.   def receive = {
  19.     case QSTask(Vector()) => sender ! Vector()
  20.     case QSTask(Vector(x)) => sender ! Vector(x)
  21.     case QSTask(d +: ds) => {
  22.       val (la, lb) = ds partition (_ < d)
  23.       val fsort = Future.sequence(
  24.         List(qsAct ? QSTask(la), qsAct ? QSTask(lb))
  25.       ).mapTo[List[Vector[Int]]]
  26.       fsort map { case List(sa, sb) => sa ++: d +: sb } pipeTo sender
  27.     }
  28.   }
  29. }
  30.  
  31.  
  32. object FiboAkkaMain extends App {
  33.   val system = ActorSystem("helloakka")
  34.   val qsAct = system.actorOf(Props[QuicksortActor], "qsAct")
  35.   val inbox = Inbox.create(system)
  36.   inbox.send(qsAct, QSTask(Vector(45, 23, 72, 35, 19, 66, 23, 65, 34, 17, 82, 81, 49, 21, 62)))
  37.   println(inbox.receive(5.seconds))
  38. }
  39. // output:
  40. // Vector(17, 19, 21, 23, 23, 34, 35, 45, 49, 62, 65, 66, 72, 81, 82)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement