Multithreading 如何使用scala演员

Multithreading 如何使用scala演员,multithreading,scala,actor,Multithreading,Scala,Actor,如何使用scala Actors解决此问题: 我有一个程序,可以找出给定路径下文件中标识符的频率。假定编码为UTF-8。我想用scala演员解决同样的问题 //program to find frequencies of identifiers import java.io._ import java.util.concurrent._ import java.util.concurrent.atomic._ object Main { // visit all files in dir

如何使用scala Actors解决此问题: 我有一个程序,可以找出给定路径下文件中标识符的频率。假定编码为UTF-8。我想用scala演员解决同样的问题

//program to find frequencies of identifiers
import java.io._
import java.util.concurrent._
import java.util.concurrent.atomic._

object Main {
  // visit all files in dir
  def processDirectory(dir: File, visit: (File) => Unit) {
    for (f <- dir.listFiles) 
      if (f.isDirectory) processDirectory(f, visit)
      else visit(f)
  }

  //counters for all identifiers
  val frequencies = new scala.collection.mutable.HashMap[String, Int]

  // Finds all identifiers in a file and increments their counters
  def process(f: File) {
    val contents = scala.io.Source.fromFile(f, "UTF-8").mkString
    val pattern = "[a-zA-Z_][0-9a-zA-Z_]*".r
    for (m <- pattern.findAllIn(contents))
      frequencies(m) = frequencies.getOrElse(m, 0) + 1
  }

  def main(args: Array[String]) {   //Give path of a directory here
    processDirectory(new File(args(0)), process _)

    println("Ten most common identifiers:")
    val sorted = frequencies.values.toBuffer.sortWith(_ > _)
    for (i <- 0 until 10)      
      for ((k, v) <- frequencies) 
        if (v == sorted(i)) println(k + " " + v)
  }
}
//查找标识符频率的程序
导入java.io_
导入java.util.concurrent_
导入java.util.concurrent.atomic_
对象主体{
//访问目录中的所有文件
def processDirectory(目录:文件,访问:(文件)=>单位){

对于(fActors帮助进行并发设计。这并不是并发的。为了提高性能,需要并行性的人有时会想做你正在做的事情:做一些简单的文件系统清理工作,向它扔额外的线程,看看它是否更快。然而,这是一个磁盘,随机访问非常昂贵,所以你必须并行处理、角色滥用或其他方式都不会带来任何好处

Scala的演员来自Erlang。因此,请看看Erlang的设计师是否能帮助您了解他们的工作内容。他们并不是真的在任务中添加线程来加快任务的执行速度

一些资源可以帮助Scala的参与者:

  • --本月底发布,但现在可以使用预印本PDF


参与者帮助进行并发设计。这并不是并发的。为了提高性能,需要并行性的人有时会想做你正在做的事情:做一些简单的文件系统清理工作,向它扔额外的线程,看看它是否更快。然而,这是一个磁盘,随机访问非常昂贵,所以你需要e从并行处理、角色滥用或其他方面得不到任何好处

Scala的演员来自Erlang。因此,请看看Erlang的设计师是否能帮助您了解他们的工作内容。他们并不是真的在任务中添加线程来加快任务的执行速度

一些资源可以帮助Scala的参与者:

  • --本月底发布,但现在可以使用预印本PDF