5

由于 Scala 提供了一个很棒的套件来处理并发(Akka、并行集合、期货等),这也让我有些困惑。是否有某种指导方针何时使用什么?某种最佳实践?

4

1 回答 1

2

首先,并发!=并行。后者可以用于您基本上以顺序方式推理的问题,但可以有效地将其划分为可以独立处理的块(在最后再次放在一起之前)。例如,映射和过滤集合,这将是并行集合的场景。

其他一些人对演员与未来进行了推理。简而言之,Actor 在每个 Actor 都可以封装自己的内部状态的意义上更像是 OO,它们更像是黑匣子。同样,参与者并发是不确定的,而数据流和期货是确定的。当您想在多台计算机上分配任务时,Actor 是一个自然的选择。Actor 可以接受多种类型的消息,而期货允许在一种特定类型上进行函数组合。(这被简化了,因为 Akka 现在有类型化的通道,我猜这使它更具可组合性)。Actors 适用于等待请求的服务,而 Futures 可以被认为是懒惰的答案。

如果您有多个并发线程,软件事务内存 (STM)也是一个有用的抽象。STM 本身并不管理线程池或并发任务,但是当与它们结合时,它以安全的方式处理可变状态。

于 2013-11-12T15:50:56.497 回答