9

我已经在 Erlang 演员模型、Groovy 演员、Scala 演员模型等上下文中的多个地方看到过它。这是指什么?

4

3 回答 3

3

我认为维基百科总结得最好:

Actor模型采用了万物皆为Actor的理念。这类似于某些面向对象编程语言使用的一切都是对象哲学,但不同之处在于,面向对象软件通常是按顺序执行的,而 Actor 模型本质上是并发的。[snip] Actor 模型是关于消息传递的语义。

于 2009-03-21T13:44:27.570 回答
2

前段时间我写了这篇博文,解释了模型的基本概念,并用 JavaScript 构建了一个基本的实现。从帖子:

在 Actor 模型中,Actor 是您构建应用程序结构的基础,它具有对外部世界不可见的内部状态,并通过异步消息与其他 Actor 交互。

如果这听起来很像面向对象编程 (OOP),那么您是对的。Actor 模型可以被认为是对消息进行特殊处理的 OOP:它们异步传递并由接收者同步执行。

每个参与者都有一个唯一的地址,您可以通过该地址向其发送消息。当消息被处理时,它与参与者的当前行为相匹配;这只不过是一个函数,它定义了为响应消息而要采取的行动。作为对消息的响应,参与者可以:

  • 创造更多的演员。
  • 向其他参与者发送消息。
  • 指定内部状态来处理下一条消息。
于 2017-10-03T22:09:47.733 回答
2

Actor 模型的主要思想是将 Actor 作为并发计算的原语进行管理。Actor 可以向其他 Actor 发送消息,接收消息并对消息做出反应并产生新的 Actor。

这里的关键思想是通过消息进行通信,而不是在不同线程之间共享内存。

重要的是要补充一点,Actor 是异步并发的,但它们不能保证消息的顺序或时间限制,即何时可以对消息采取行动(因此不能将原子事务拆分为 Actor)。

Actor模型的使用主要适用于两种情况:

  • 当可以将您的解决方案分解为一组独立的任务时。
  • 当您可以将解决方案分解为一组由清晰的工作流程链接的任务时。

插图:

在此处输入图像描述

于 2019-05-22T22:04:29.523 回答