Вы можете сделать это с меньшими накладными расходами, чем создание акторов, используя фьючерсы:
import scala.actors.Futures._
val nums = (1 to 1000).grouped(100).toList
val parts = nums.map(n => future { n.reduceLeft(_ + _) })
val whole = (0 /: parts)(_ + _())
Вы должны справиться с разложением проблемы и записью блока "future" и перекомпоновкой его в окончательный ответ, но это облегчает выполнение множества небольших блоков кода параллельно.
(Обратите внимание, что _()
в левой части окна - это функция применения будущего, которая означает «Дайте мне ответ, который вы рассчитывали параллельно!», И блокируется, пока ответ не станет доступен.)
Библиотека параллельных коллекций автоматически разложит проблему и предложит вам ответ (как в pmap
в Clojure); это еще не часть основного API.