Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 为什么Akka Actor的默认行为是一个接一个地处理消息?_Scala_Concurrency_Akka_Pure Function - Fatal编程技术网

Scala 为什么Akka Actor的默认行为是一个接一个地处理消息?

Scala 为什么Akka Actor的默认行为是一个接一个地处理消息?,scala,concurrency,akka,pure-function,Scala,Concurrency,Akka,Pure Function,我读到过一个阿克卡演员一个接一个地处理信息。为什么会这样 我无法理解的是“为什么消息的同步执行是默认行为?”。我知道,对于邮箱消息的并行执行,功能(要执行的作业)应该没有副作用 这是默认的akka行为,因为具有绝对独立执行和0副作用的用例是少数,我们通常处理需要公共资源的作业 如果scala和函数式编程的设计目标是0副作用代码,下面的场景适用,那么为什么这不是akka actor消息处理中的默认行为。如果您查看一下,您会发现两个保证之一是每个发送方-接收方对的消息顺序。如果消息以不确定的顺序处理

我读到过一个阿克卡演员一个接一个地处理信息。为什么会这样

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

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


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

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

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

这是因为:

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

如果参与者可以并行处理多条消息,那么它可以并发访问自己的内部状态,而您将不得不重新考虑锁、同步、
ConcurrentModificationException
s。。。这就违背了这一点。

我想有一点是,您希望在不同的参与者之间进行并行化,而不是在一个特定的参与者内部进行并行化。