演员模型与面向对象模型

时间:2016-12-19 04:24:41

标签: oop akka actor-model

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

提前致谢。

2 个答案:

答案 0 :(得分:5)

OO模型的缺点:

  1. 传统的OOP语言并非设计为并发。它是 很容易引入竞争条件,因为它使用共享 状态。
  2. 程序员必须识别并修复所有可能的问题 区域使用锁定机制。
  3. 对于简单的程序,锁定很容易实现。但随着程序变得复杂,锁定的实现也变得复杂。
  4. Actor模型通过使用无共享模型克服了这个问题,因此不会影响并发性,也不需要锁定机制。

答案 1 :(得分:3)

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

一旦C ++和Java出现,面向对象编程一词的含义就会稍有不同。它变成了某些人所谓的“面向类程序设计”。

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

演员模型专家:

  • 在分布式系统中更好地工作
  • 在许多情况下更易于理解架构
  • 使用多个“角色”为现实世界的现象/复杂系统建模
  • 与功能编程样式大体兼容(请参阅Smalltalk)

演员模型的缺点:

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