演员模特是否仅限于特定语言?

时间:2012-04-25 20:39:44

标签: scala architecture erlang actor

我正在阅读关于erlang和演员模型的interesting blog post。我还听说scala支持actor模型。从我到目前为止收集的那些小东西中,actor模型将处理分解成通过传递消息彼此通信的组件。通常,这些过程是不可变的。

在架构级别,这些功能是特定语言还是更多?更具体地说,你不能只用几乎任何语言实现相同的actor模型,只是使用某种形式的消息队列来在工作进程之间传递消息吗? (例如,使用类似celery的内容)。或者像erlang和scala这样的语言是否只是透明地执行此操作并much faster

4 个答案:

答案 0 :(得分:12)

当然你可以定义一个" Actor Library"几乎在任何语言中,但在Erlang中,模型是用语言编写的,并且实际上是唯一可用的并发模型。

虽然Scala的演员系统得到了很好的实施,但在一天结束时,它仍然容易受到Erlang免受的一些危害。我会提请你注意这个paper

任何以任何支持共享可变状态的命令式语言实现的Actor库都是这种情况。

一个有趣的例外是Nodes.js。正在与节点之间的演员进行一些工作,这些演员可能表现出与Erlang相同的隔离属性,因为没有共享的可变状态。

答案 1 :(得分:3)

演员模型仅限于任何特定的平台或编程语言,它毕竟只是一个模型。

Erlang和Scala对这个模型有很好的实用性,很适合这些平台的典型技术堆栈,有助于有效地解决某些类型的任务。

答案 2 :(得分:1)

为了增加上述几点,Erlang actor模型是你可以编程的唯一方法,使你的代码从一开始就可以扩展。 Erlang进程是轻量级的,你可以在一台机器上产生10-100K(我认为你不能用python做到这一点),这会改变你处理问题的方式。例如,在我们的产品中,我们使用Erlang解析Web服务器日志,并生成一个Erlang进程来处理每一行。这样,如果一个日志行被破坏,或者处理它的进程崩溃,其他任何一个都没有发生。 另一个不同之处在于,当您开始使用OTP时,您将获得流程主管,并且您可以将流程连接起来,以便在终止所有其他流程时执行。 除此之外,Erlang还有其他一些不错的功能(可以通过库在其他语言中找到,但在这里它也可以在其中找到),如模式匹配和热部署。

答案 3 :(得分:0)

不,没有关于Actor模型的特定语言。事实上,你已经在你的问题中提到了Scala,其中actor不是语言的一部分,而是作为一个库实现。 (实际上是三个竞争库。)

然而,就像功能编程或面向对象编程一样,直接支持Actor编程,或者至少支持一些使其更容易实现的抽象,在语言中将导致非常不同的编程体验。任何曾经用C语言完成函数式编程或面向对象编程的人都可能会理解这一点。