Lassen sich die folgende Codezeile mehrmals ausgeführt:Verhalten von scala fach parallel Sammlungen
Set(1,2,3,4,5,6,7).par.fold(0)(_ - _)
Die Ergebnisse sind sehr interessant:
scala> Set(1,2,3,4,5,6,7).par.fold(0)(_ - _)
res10: Int = 8
scala> Set(1,2,3,4,5,6,7).par.fold(0)(_ - _)
res11: Int = 20
jedoch klar soll es wie in seiner sequentiellen Version sein :
scala> Set(1,2,3,4,5,6,7).fold(0)(_ - _)
res15: Int = -28
ich verstehe, dass der Betrieb -
ist nicht asso catiative auf ganzen Zahlen und das ist der Grund für ein solches Verhalten, aber meine Frage ist ziemlich einfach: bedeutet es nicht, dass fold
sollte nicht in .par
Implementierung von Sammlungen parallelisiert werden?
Vielen Dank für Ihre Antwort. Verlängert das Lesen von Dokumenten wie üblich und handelte nach Intuition :) – tkachuko
Das Scaladoc ist eine Lüge. 'SeqLike # fold' tatsächlich nutzt' foldLeft': https://github.com/scala/scala/blob/1706a37eb84ec252aea77bccebad3e48448534ad/src/library/scala/collection/TraversableOnce.scala#L212 –
Aber es bedeutet nicht, es ist die gleiche für Par. Sie werden tatsächlich unabhängig voneinander in parallelen Sammlungen implementiert. – tkachuko