如何在Erlang中实现演员模型的Arbiters?

时间:2016-11-08 23:23:07

标签: concurrency functional-programming erlang actor actor-model

我知道Erlang使用Actor模型来支持并发,而Erlang进程与Actors相同:它们发送消息,不可变等等。但根据Carl Hewitt的说法,Actor模型中的一个重要事项是不确定性和仲裁(给定仲裁者,你可以同时将多个输入(例如I0和I1)输入仲裁器,但只有一个可能的结果(例如O0)或O1)将在另一端出来)。

所以,我很有意思,Erlang如何实现这个概念? Arbiters在Erlang并发模型/ actor模型实现中的作用是什么?

1 个答案:

答案 0 :(得分:9)

这是非常深刻的哲学(参见例如https://en.wikipedia.org/wiki/Indeterminacy_in_concurrent_computation),但据我所知,他说在演员模型中,每当演员有多个输入时,就会出现这样的情况。魔术盒,以任何方式决定传入消息的顺序,即使这意味着延迟一些消息的任意长(但有界)时间。即,即使程序结构似乎偏向某个到达订单,您也永远不能依赖任何特定的顺序或时间来接收并行消息。 (请注意,这是关于演员程序推理的理论概念 - 除了测试目的,你不会试图在实践中使系统不必要地随机化。)

Erlang消息传递的语义几乎相同:每当两个进程向第三个进程发送消息,并且对各个发送事件没有排序约束时,您永远不能依赖于哪个消息将会结束首先在接收者的邮箱中。即使所有进程都在同一个Erlang VM中运行,它们也可以被任意延迟。再一次,这是关于什么保证你作为程序员(无),而不是让Erlang VM插入随机延迟。 (随机延迟可以由其他事物自然引入,例如页面错误的操作系统级别暂停。)