From c4b72fdf2718845b80dae8e1cb09dac962c657e7 Mon Sep 17 00:00:00 2001 From: "John Barton (joho)" Date: Mon, 3 Jan 2011 18:38:11 +1100 Subject: [PATCH] typing up the more real world actor example --- scala/sizer.scala | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 scala/sizer.scala diff --git a/scala/sizer.scala b/scala/sizer.scala new file mode 100644 index 0000000..032b523 --- /dev/null +++ b/scala/sizer.scala @@ -0,0 +1,44 @@ +import scala.io._ +import scala.actors._ +import Actor._ + +object PageLoader { + def getPageSize(url : String) = Source.fromURL(url).mkString.length +} + +val urls = List("http://twitter.com", + "http://amazon.com", + "http://themeforest.net") + +def timeMethod(method: () => Unit) = { + val start = System.nanoTime + method() + val end = System.nanoTime + println("Mthod took " + (end - start)/1000000000.0 + "seconds.") +} + +def getPageSizeSequentially() = { + for(url <- urls) { + println("Size for " + url + ": " + PageLoader.getPageSize(url)) + } +} + +def getPageSizeConcurrently() = { + val caller = self + + for(url <- urls) { + actor { caller ! (url, PageLoader.getPageSize(url)) } + } + + for(i <- 1 to urls.size) { + receive { + case (url, size) => println("Size for " + url + ": " + size) + } + } +} + +println("Sequential") +timeMethod { getPageSizeSequentially } +println("Concurrent") +timeMethod { getPageSizeConcurrently } +