scala - 并发概述

标签 scala concurrency akka

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

最佳答案

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

其他一些人对 actors versus futures 进行了推理.简而言之,actor 更像是面向对象的,因为每个 actor 都可以封装自己的内部状态,它们更像是黑匣子。参与者并发性也是不确定的,而数据流和 future 是确定性的。当您想在多台计算机上分配任务时,Actor 是一个自然的选择。 Actors 可以接受多种类型的消息,而 future 允许在一种特定类型上进行函数组合。 (这是简化的,因为 Akka 现在有类型 channel ,我想这使它更易于组合)。 Actors 适用于等待请求的服务,而 futures 可以被认为是懒惰的答案。

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

关于scala - 并发概述,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19932507/

相关文章:

scala - 循环遍历Scala中包中的每个类

scala - 如何验证 Play Framework 中的可选查询参数?

ios - UIImageView 延迟绘制

java - 无法加载 [akka.event.Logging$Error$]

scala - 在 scala 中将列表列表扁平化为一个带有异常的集合

mysql - 来自 Django select_for_update 的锁定记录是否受更新值的影响

concurrency - Go 中生产者/消费者最简洁的成语是什么?

scala - Scala 折叠如何工作?

Akka Actor 基数

scala - 使用 Scala 的数字和小数进行更高级的数学运算