gpt4 book ai didi

scala - "become"是如何在支持actor模型的语言中实现的?

转载 作者:行者123 更新时间:2023-12-04 00:40:35 25 4
gpt4 key购买 nike

Gul Agha 在他的技术报告“Actors:分布式系统中的并发计算模型”中很好地描述了 actor 模型。

在第 49 页,他解释了“become”命令:

become <expression>

调用“become X”后,一个actor将他的所有消息转发到另一个actor的邮箱(X)。

然而,我不确定这是如何在 Erlang 和 Scala 等语言中实现的(它完全是实现的)。我必须手动编码吗?效率呢? Agha 展示了使用消息传递的堆栈实现。每次执行 pop 或 push 时,都会向某个 actor 再添加一个转发链接......经过数十万次操作后,我希望这样的实现会花费太多时间转发消息而不做实际工作,除非某些在幕后进行了很好的优化。

所以我的问题是:如何在 Erlang、Scala(以及其他语言的库)等典型的 actor 语言中实现转发(或“变成”)?

最佳答案

请查看 Agha 的论文“Actors:分布式系统中的并发计算模型”的第 12 页(我拥有的 PDF 副本的第 26 页)。 "become"是他的 Actor 语言,你如何指定#2, Actor 的新行为。将消息转发给另一个参与者只是许多可能的新行为之一。

我认为对于 Scala Actor ,如果您想要转发行为,您基本上与 Erlang 处于同一条船上。在引擎盖下,Scala 的“react”和“reactWithin”的工作方式与 become 非常相似,因为 react 块定义的部分函数是 actor 的新行为,但我不确定这种相似性是否是故意的。

大多数(全部?)“ Actor ”实现与 Hewitt 的 Actor 模型和 Agha 的 Actor 语言有很大的不同。 IIRC 用 Agha 语言指定 Actor 行为的语言部分甚至不是图灵完备的。只有当您考虑 Actor 的配置时,整个语言才会变得图灵完备。我想说 Actor 模型和当前 Actor 框架之间的关系有点像 SmallTalk 中的面向对象与 C++ 中的面向对象的关系。有一些概念转移和类似的术语,但在细节上它们非常非常不同。

关于scala - "become"是如何在支持actor模型的语言中实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3325271/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com