并发概述

Ste*_*nze 5 concurrency scala akka

由于Scala提供了一个处理并发性的很好的套件(Akka,并行集合,期货等),它也让我有些困惑.有什么样的指导线何时使用?某种最佳做法?

0__*_*0__ 2

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

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

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