18

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

提前致谢。

4

2 回答 2

24

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

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

Actor模型重新强调了最初的 OOP 概念,即消息传递是核心基础。

演员模型优点:

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

演员模型缺点:

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

OO模型的缺点:

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

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

于 2016-12-20T04:39:23.317 回答