面向对象编程一词最初来自 Alan Kay 和 Smalltalk。它强调消息传递是其主要功能。这就是 OOP 最初的意思。
一旦 C++ 和 Java 出现,面向对象编程一词的含义就略有不同。它演变成一些人所说的“面向类的编程”。
Actor模型重新强调了最初的 OOP 概念,即消息传递是核心基础。
演员模型优点:
- 在分布式系统中工作得更好
- 在许多情况下更容易在架构上理解
- 对具有多个“参与者”的现实世界现象/复杂系统进行建模
- 与函数式编程风格在很大程度上兼容(参见 Smalltalk)
演员模型缺点:
- 很难对算法进行推理,因为它不仅仅存在于一个地方。它被分成不同的演员/文件,你必须追查它并遵循代码。
- 类似地,可以在多个参与者之间混合使用多种算法。因此,您可能会转到一个文件并阅读一个 Actor 的代码以遵循该算法,但会因为其他算法也混入同一个 Actor 中而感到困惑。
- 传统的信号量式锁定是不可能的。必须使用可能更复杂的 STM 样式。
- 更难获得“返回值”。Actor 模型是“一劳永逸”。您必须弄清楚如何将“返回值”返回给原始请求者。这会增加很多开销,因为现在您必须设置一种方式来接收它并通过整个系统传递上下文(uniqueId / taskId)。您还需要管理状态以保存该信息,直到“响应”返回。如果没有 Actor 模型,它们将只是块作用域中的局部变量。