Как использовать актеров скала - PullRequest
0 голосов
/ 03 декабря 2011

Как решить эту проблему с помощью scala Actors: у меня есть программа, которая определяет частоту идентификаторов в файлах по заданному пути.Предполагаемая кодировка UTF-8.Я хочу решить ту же проблему с актерами скалы.

//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)
  }
}

Также, пожалуйста, объясните концепцию актеров скалы.Я запутался в актерах скалы.

1 Ответ

3 голосов
/ 03 декабря 2011

Актеры помогают с параллельным дизайном.В этом нет ничего параллельного.Люди, которые хотят параллелизм , для производительности, иногда хотят сделать именно то, что вы делаете: возьмите какую-нибудь простую вещь, связанную с файловой системой, добавьте дополнительные потоки и посмотрите, не быстрее ли это.Тем не менее, это диск , а произвольный доступ чрезвычайно дорогой , так что вам ничего не выиграет от параллельной обработки, злоупотребления актерами или иным образом.

Scala'sАктеры из Эрланга.Поэтому, пожалуйста, посмотрите, поможет ли Параллельное ориентированное программирование на Erlang (pdf) , одним из дизайнеров Erlang, понять, о чем они.На самом деле они не предназначены для создания потоков для выполнения этих задач.

Некоторые ресурсы, помогающие актерам Scala:

...