日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

七周七语言:Scala Day 3

發布時間:2023/12/18 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 七周七语言:Scala Day 3 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這一天的內容還是比較豐富的,不僅介紹了Scala中的對于XML的處理、正則,更有比較重要的“并發”。

Scala支持并發的方式代表了并行編程領域的一次重大進步。actor模型和線程池都是很受歡迎的改進,并且無需可變狀態的并發應用設計能力也絕對是一個巨大的進步。--摘自《七周七語言》
  • 對于sizer程序,如果你沒有為每一個要跟蹤的鏈接創建一個新的actor,這段程序的性能會發生怎樣的變化?

    感覺會很慢,因為每個actor都包含了react和receive方法,如果沒有對于每個鏈接都創建actor的話,那和sequentially的方法就沒有什么區別了。

  • 修改sizer程序,增加一個計算頁面上鏈接總和的消息。

    import scala.io._ import scala.actors._ import Actor._ ? object PageLoader { ????def getPageSize(url: String) = Source.fromURL(url).mkString.length ????// get the contents of the the URL ????def getPageContent(url: String) = Source.fromURL(url).mkString ????// regular expression of a link ????def getUrlNumber(url: String) = { ????????val reg = """^(?i)<a[^>]+?href""".r ??? ????????reg.findAllIn(getPageContent(url)).size ????} } // the List of urls val urls = List("http://www.baidu.com/", ????????????????"http://www.seu.edu.cn/", ????????????????"http://www.fantasyshao.tk/" ???????????????) // Cauculate the time of running def timeMethod(method: ()=> Unit) = { ????val start = System.nanoTime ????method() ????val end = System.nanoTime ????println("Method took " + (end - start)/1000000000.0 + " seconds.") } // not using actors def getPageSizeSequentially() = { ????for(url <- urls) { ????????println("Size for " + url + ": " + PageLoader.getPageSize(url)) ????} ????for(url <- urls) { ????????println("Links in " + url + ": " + PageLoader.getUrlNumber(url)) ????} } // concurrency method def getPageSizeConcurrently() = { ????val caller = self ????for(url <- urls) { ????????actor { caller ! ("Size", url, PageLoader.getPageSize(url))} ????????actor { caller ! ("Number", url, PageLoader.getUrlNumber(url))} ????} ????// two actor for each url, so the size became lager ????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 }

轉載于:https://www.cnblogs.com/iceCream/archive/2013/01/23/2873093.html

總結

以上是生活随笔為你收集整理的七周七语言:Scala Day 3的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。