52 lines
1.1 KiB
Scala
52 lines
1.1 KiB
Scala
// 2023 syntax of scala is too different to reproduce this example
|
|
|
|
import scala.io._
|
|
import scala.actors._
|
|
import Actor._
|
|
|
|
object PageLoader {
|
|
def getPageSize(url: String) = Source.fromURL(url).mkString.length
|
|
|
|
def getCountOfLinks(url: String): int = {
|
|
val raw = Source.fromURL(url).mkString
|
|
|
|
val count = "<a>".r.findAllIn(raw).length
|
|
|
|
return count
|
|
}
|
|
}
|
|
|
|
val urls = List("https://www.amazon.com/",
|
|
"https://www.twitter.com/",
|
|
"https://www.google.com/",
|
|
"https://www.cnn.com/")
|
|
|
|
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))
|
|
}
|
|
}
|
|
|
|
def getPageSizeConcurrrently() = {
|
|
def 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)
|
|
}
|
|
}
|
|
}
|