Actor 模型与面向对象模型

Actor model vs object oriented model

我在网上搜索了很长时间,没有找到Actor模型克服的面向对象模型的具体缺点。请帮我一些指示和解释。

提前致谢。

面向对象模型的缺点:

  1. 传统的 OOP 语言并不是为并发设计的。它是 很容易引入竞争条件,因为它使用的是共享的 状态。
  2. 程序员必须识别并解决所有可能的问题 通过使用锁定机制区域。
  3. 对于简单的程序,锁定很容易实现。但是随着程序越来越复杂,锁的实现也越来越复杂。

Actor 模型通过使用 share nothing 模型克服了这个问题,因此不影响并发并且不需要锁定机制。

术语面向对象编程 最初来自 Alan Kay 和 Smalltalk。 它强调消息传递是其主要功能。这就是OOP原本的意思。

C++ 和 Java 出现后,面向对象编程一词的含义略有不同。它演变为一些人所说的“面向class的编程”。

Actor 模型再次强调消息传递的原始 OOP 概念是核心基础。

演员模特专业:

  • 在分布式系统中工作得更好
  • 在许多情况下更容易从架构上理解
  • 为具有多个“参与者”的真实世界现象/复杂系统建模
  • 与函数式编程风格很大程度上兼容(参见 Smalltalk)

演员 模特缺点:

  • 更难推理一种算法,因为它不只存在于一个地方。它被分成不同的演员/文件,你必须追踪它并遵循代码。
  • 同样,可以在多个参与者之间混合使用多种算法。因此,您可能会转到一个文件并阅读一个 Actor 的代码以遵循该算法,但会感到困惑,因为其他算法也混合到同一个 Actor 中。
  • 无法使用传统的信号量样式锁定。必须使用STM-style,可能更复杂。
  • 更难获得“return 值”。 Actor 模型是“发射后不管”。您必须弄清楚如何将“return 值”返回给原始请求者。这会增加很多开销,因为现在您必须设置一种方法来接收它并通过整个系统传递上下文 (uniqueId / taskId)。您还需要管理状态以保留该信息,直到“响应”返回。如果没有 actor 模型,它们将只是块作用域中的局部变量。