【问题标题】:Basic Explanation of Actors in ErlangErlang中Actor的基本解释
【发布时间】:2016-08-15 20:20:39
【问题描述】:

我正在尝试对 Erlang 中的演员进行非常基本的解释。它应该尽可能简单,但不会遗漏理论的关键特征或它的 Erlang 实现。这是我的解释:

actor模型是并发计算的数学模型,将actors视为并发计算的通用原语。 Actor 是一个计算实体,它响应接收到的消息,可以同时 (1) 向其他 Actor 发送有限数量的消息,(2) 创建有限数量的新 Actor,以及(3) 指定接收到的下一条消息的行为。

在 Erlang 中,每个参与者都是虚拟机中的一个独立进程,由一个函数实现。进程通过相互发送消息进行通信。每条消息都是明确的、可追溯的和安全的。消息在邮箱中接收并按接收顺序存储。它们存储在那里,直到接收过程将它们取出以供读取。这称为异步消息传递。

你们怎么看?可以吗?我应该添加或更改任何内容吗?谢谢。

【问题讨论】:

  • @ElToro1966 猜你可以在图中添加一个邮箱。

标签: multithreading concurrency parallel-processing erlang actor


【解决方案1】:

我认为,如果您不将 Actor 与 Erlang 进程混淆,您会有所帮助。您从 Wikipedia 对 Actor 模型的描述开始,只是为了无缝地开始编写有关 Erlang 进程的文章,就好像它是一回事一样。 Actor 模型是一种数学模型,可以通过多种不同方式实现,包括纯 C 或 C++ 低级实现。另一方面,Erlang 进程是轻量级的抢占式语言特性,它允许并行运行大量进程,比使用本机系统进程甚至线程更有效。碰巧它们是根据数学模型建模的,但这是基于specific requirements 的设计决策。

我认为,如果您将 Actor 模型作为一个数学模型简单地讨论一下,然后再简单地讨论一下它是如何在 Erlang 中实现的,并指出 Erlang 特有的任何差异和特性,我认为它们会更好地结合在一起。

【讨论】:

  • 您将整个 Joe Armstrong 的论文作为参考。我猜 Ch.2.4 和 3.4 与手头的问题有关。在您看来,还有什么需要特别注意的吗?谢谢。
  • 是的,2.4 和 3.4 是一个好的开始,但还有:2.2、2.3、2.5 和 3.10,它们对 Erlang 应用程序提出了要求; 2.10 和 3-3.1 解释了为什么 Erlang 是一种面向消息的语言; 3.5.6 和 3.6 描述了链接和监视器,它们是 Erlang 进程的基本部分,Actor 模型不太需要; 3.7 允许用内部 Erlang 进程表示外部进程;图 4 和图 6 讨论了 OTP 行为,可以将其与 Actor 模型中的行为进行比较。还值得注意的是,Erlang 中的消息是有序的(2.4.5),而在 Actor 模型中它们不是。
  • 我已经阅读了阿姆斯特朗的大部分论文,但根本没有提到演员。此外,从论文和许多其他来源(我想 Armstrong 的书 Programming Erlang 或教程Learn You Some Erlang for Great Good 是很好的起点)都清楚地表明,Erlang 在很大程度上实践了演员模型的哲学,但是正如您所说,Erlang 进程是一种与模型不同的实际实现。我想我会坚持解释流程:)
  • 我想提一下,论文中根本没有提到 Actor 模型,但是评论字段太短了 :) 在 OOP 语言中,OO 原则是编写它们时的设计决策,例如红宝石或 C++。 Erlang 不是这样的。 Erlang 的主要目标是并发、软实时、分布式、连续操作、容错等。面向 Actor 不是。恰好 Actor 模型擅长对其中一些特征进行建模,例如并发性,所以 Erlang 不由自主地实现了其中的一些原则,但 Erlang 远不止这些 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-24
  • 2022-01-03
  • 2019-04-26
相关资源
最近更新 更多