По Scaladoc,Странное поведение в Scala Parallel View
Вид ленивый вариант какой-то коллекции. Сборные трансформаторы, такие как карта или фильтр или ++, не пересекают какие-либо элементы при применении к представлению. Вместо этого они создают новое представление, которое просто записывает тот факт, что операция должна применяться.
Это означает, что операции не будут применяться до тех пор, пока элементы не будут доступны. Но как насчет Parallel?
Взгляните на этот пример:
def tn = Thread.currentThread.getName
val strList = List("I", "am", "a" , "student", ".", "I", "come", "from", "China", ".","I","love","peace")
val pvs = strList.par.view.filter{ s => println("f "+ tn); s == "I"}.map{s => println("m " + tn); s.toLowerCase}
Второй напечатает как следующее:
При применении foreach
на pvs
, он выводит:
Я не могу понять, почему performa сть из Parallel стиле не то же самое, как нормальный:
val strList = List("I", "am", "a" , "student", ".", "I", "come", "from", "China", ".","I","love","peace") // or read from a text file , e.g. article.txt
strList.view.filter{s => println("f"); s == "I"}.map{s => println("m"); s.toLowerCase}.foreach(s => println("p"))
Просьба представить текст за вырезку, если это возможно, а не изображения. Btw .: Что такое 'tn', название темы? –
Пронумерованный из-за изображений был скопирован и вставлен текст был бы намного лучше. –