Skip to content

Instantly share code, notes, and snippets.

@passingloop
Created September 28, 2011 03:56
Show Gist options
  • Save passingloop/1246949 to your computer and use it in GitHub Desktop.
Save passingloop/1246949 to your computer and use it in GitHub Desktop.
7l7w-scala-day-3
--- sizer.scala 2011-09-28 12:54:10.000000000 +0900
+++ my_sizer.scala 2011-09-28 12:54:47.000000000 +0900
@@ -5,5 +5,10 @@
// START:loader
object PageLoader {
- def getPageSize(url : String) = Source.fromURL(url).mkString.length
+ val reg = """<a [^>]*>[^<]+</a>""".r
+
+ def getPageSize(url : String) = {
+ val page = Source.fromURL(url).mkString
+ (page.length, reg.findAllIn(page).length)
+ }
}
// END:loader
@@ -48,4 +53,18 @@
// END:concurrent
+// START:singleActor
+def getPageSizeUsingSingleActor() = {
+ val caller = self
+
+ for(url <- urls) {
+ actor { caller ! (url, PageLoader.getPageSize(url)) }
+ receive {
+ case (url, size) =>
+ println("Size for " + url + ": " + size)
+ }
+ }
+}
+// END:singleActor
+
// START:script
println("Sequential run:")
@@ -54,3 +73,6 @@
println("Concurrent run")
timeMethod { getPageSizeConcurrently }
+
+println("Single actor run")
+timeMethod { getPageSizeUsingSingleActor }
// END:script
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment