我读过一个 akka 演员一个接一个地处理消息。为什么是这样?
我无法理解的是“为什么同步执行消息是默认行为?”。我确实明白,对于邮箱消息的并行执行,功能(要执行的作业)应该有 0 副作用。
这是默认的 akka 行为吗,因为具有绝对独立执行和 0 副作用的用例是少数,我们通常处理需要公共资源的作业。
如果 scala 和函数式编程的设计目标是 0 副作用代码,以下场景适用,那么为什么这不是 akka actor 消息处理中的默认行为。
我读过一个 akka 演员一个接一个地处理消息。为什么是这样?
我无法理解的是“为什么同步执行消息是默认行为?”。我确实明白,对于邮箱消息的并行执行,功能(要执行的作业)应该有 0 副作用。
这是默认的 akka 行为吗,因为具有绝对独立执行和 0 副作用的用例是少数,我们通常处理需要公共资源的作业。
如果 scala 和函数式编程的设计目标是 0 副作用代码,以下场景适用,那么为什么这不是 akka actor 消息处理中的默认行为。
如果您查看Akka 文档,您会发现两个保证之一是每个发送方-接收方对的消息排序。如果以不确定的顺序处理消息,则此保证将受到损害。
我的理解是,actor 模型的一个关键点是让并行编程更易于理解(并且更易于“正确”),而不会出现死锁等难以调试的问题。
这有效,因为:
如果参与者可以并行处理多条消息,它就可以同时访问自己的内部状态,而您将不得不担心锁、同步等ConcurrentModificationException
......这将破坏这一点。