OO模型的缺点:
- 传统的OOP语言并非设计为并发。它是
很容易引入竞争条件,因为它使用共享
状态。
- 程序员必须识别并修复所有可能的问题
区域使用锁定机制。
- 对于简单的程序,锁定很容易实现。但随着程序变得复杂,锁定的实现也变得复杂。
醇>
Actor模型通过使用无共享模型克服了这个问题,因此不会影响并发性,也不需要锁定机制。
面向对象编程一词最初来自Alan Kay和Smalltalk。
它强调消息传递是其主要功能。这就是OOP的初衷。
一旦C ++和Java出现,面向对象编程一词的含义就会稍有不同。它变成了某些人所谓的“面向类程序设计”。
Actor 模型重新强调了最初的OOP消息传递概念,它是核心基础。
演员模型专家:
- 在分布式系统中更好地工作
- 在许多情况下更易于理解架构
- 使用多个“角色”为现实世界的现象/复杂系统建模
- 与功能编程样式大体兼容(请参阅Smalltalk)
演员模型的缺点:
- 由于一种算法不只存在于一个地方,因此更需要推理。它分散在不同的参与者/文件中,您必须将其追逐并遵循代码。
类似地,可以在多个参与者之间混合使用多种算法。因此,您可能会去看文件并阅读Actor的代码以遵循该算法,但由于其他算法也混入了同一Actor中,因此感到困惑。
- 无法进行传统的信号量样式锁定。必须使用STM样式,这可能会更复杂。
- 更难获得“返回值”。演员模型是“生与死”。您必须弄清楚如何将“返回值”返回给原始请求者。这会增加很多开销,因为现在您必须设置一种接收它并通过整个系统传递上下文(uniqueId / taskId)的方法。您还需要管理状态以保留该信息,直到“响应”返回为止。没有参与者模型,它们将只是块范围内的局部变量。