您的位置:首页 > 其它

Scala第三天作业

2015-09-24 15:27 281 查看
1.修改sizer程序,增加一个计算页面上链接总和的消息。

import scala.io._
import scala.actors._
import Actor._

object PageLoader {
def getPageSize(url: String) = Source.fromURL(url).mkString.length

def getLinkNumber(url: String) = {
val reg = """<a.{0,}\s{1,}href=""".r
reg.findAllIn(Source.fromURL(url).mkString).size
}
}

val urls = List("https://github.com/",
"http://spring.io/",
"http://tomcat.apache.org/index.html")

def timeMethod(method: ()=> Unit) = {
val start = System.nanoTime
method()
val end = System.nanoTime
println("Method took " + (end - start)/1000000000.0 + " seconds.")
}

def getPageSizeSequentially() = {
for(url <- urls) {
println("Size for " + url + ": " + PageLoader.getPageSize(url))
}
for(url <- urls) {
println("Links in " + url + ": " + PageLoader.getLinkNumber(url))
}
}

def getPageSizeConcurrently() = {
val caller = self
for(url <- urls) {
actor { caller ! ("Size", url, PageLoader.getPageSize(url))}
actor { caller ! ("Number", url, PageLoader.getLinkNumber(url))}
}
for(i <- 1 to (urls.size * 2)) {
receive {
case ("Size", url, size) =>
println("Size for " + url + ": " + size)
case ("Number", url, number) =>
println("Number of " + url + ": " + number)
}
}
}

println("Sequential run:")
timeMethod { getPageSizeSequentially }

println("Concurrent run:")
timeMethod { getPageSizeConcurrently }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: