2

我读过一个 akka 演员一个接一个地处理消息。为什么是这样?

我无法理解的是“为什么同步执行消息是默认行为?”。我确实明白,对于邮箱消息的并行执行,功能(要执行的作业)应该有 0 副作用。

这是默认的 akka 行为吗,因为具有绝对独立执行和 0 副作用的用例是少数,我们通常处理需要公共资源的作业。

如果 scala 和函数式编程的设计目标是 0 副作用代码,以下场景适用,那么为什么这不是 akka actor 消息处理中的默认行为。

4

2 回答 2

1

如果您查看Akka 文档,您会发现两个保证之一是每个发送方-接收方对的消息排序。如果以不确定的顺序处理消息,则此保证将受到损害。

于 2016-12-15T11:52:19.340 回答
1

我的理解是,actor 模型的一个关键点是让并行编程更易于理解(并且更易于“正确”),而不会出现死锁等难以调试的问题。

这有效,因为:

  • 您可以通过创建多个参与者并在它们之间分配工作负载来轻松实现并行性。
  • 每个 Actor 内部的代码都是单线程的,并且 Actor 的状态对其他 Actor 是隐藏的,因此您不需要保护 Actor 的内部状态免受并发访问问题的影响。

如果参与者可以并行处理多条消息,它就可以同时访问自己的内部状态,而您将不得不担心锁、同步等ConcurrentModificationException......这将破坏这一点。

于 2016-12-15T16:14:25.313 回答