【发布时间】:2013-11-12 14:59:05
【问题描述】:
由于 Scala 提供了一个出色的套件来处理并发(Akka、并行集合、期货等),这也让我有些困惑。是否有某种指导方针何时使用什么?某种最佳做法?
【问题讨论】:
标签: scala concurrency akka
由于 Scala 提供了一个出色的套件来处理并发(Akka、并行集合、期货等),这也让我有些困惑。是否有某种指导方针何时使用什么?某种最佳做法?
【问题讨论】:
标签: scala concurrency akka
首先,concurrency != parallelism。后者可以用于您基本上以顺序方式推理的问题,但可以有效地将其划分为可以独立处理的块(在最后再次放在一起之前)。例如,映射和过滤集合,这将是并行集合的场景。
其他一些人对actors versus futures 进行了推理。简而言之,Actor 在每个 Actor 都可以封装自己的内部状态的意义上更像是 OO,它们更像是黑匣子。同样,参与者并发是不确定的,而数据流和期货是确定的。当您想在多台计算机上分配任务时,Actor 是一个自然的选择。 Actor 可以接受多种类型的消息,而期货允许在一种特定类型上进行函数组合。 (这被简化了,因为 Akka 现在有类型化的通道,我猜这使它更具可组合性)。 Actors 适用于等待请求的服务,而futures可以被认为是懒惰的答案。
如果你有多个并发线程,software transactional memory (STM) 也是一个有用的抽象。 STM 本身并不管理线程池或并发任务,但是当与它们结合时,它以安全的方式处理可变状态。
【讨论】: