Mic*_*ael 8 concurrency scala future actor
假设我需要运行一些并发任务.
我可以将每个任务包装Future在一起并等待它们完成.或者,我可以Actor为每个任务创建一个.每个人都Actor将执行其任务(例如,在接收到"开始"消息时)并将结果发回.
我想知道何时应该使用前者(使用Futures)和后者(使用Actors)方法,以及为什么这种Future方法对于上述情况更好.
因为它在语法上更简单.
val tasks: Seq[() => T] = ???
val futures = tasks map {
  t => future { t() }
}
val results: Future[Seq[T]] = Future.sequence(futures)
在results未来,你可以再等上使用Await.result,也可以进一步将其映射/用它换理解或安装回调就可以了.
相比之下,实例化所有演员,向他们发送消息,编码他们的receive块,接收他们的响应并关闭它们 - 这通常需要更多的样板.
作为一般规则,使用适合您的应用程序的最简单的并发模型,而不是最强大的.从最简单到最复杂的排序将是顺序编程 - >并行集合 - >期货 - >无状态演员 - >有状态演员 - >具有软件事务存储器的线程 - >具有显式锁定的线程 - >具有无锁算法的线程.选择此列表中的第一个解决问题的方法.你去的列表越往下,复杂性和风险就越大,所以你最好简单地交易概念性权力.