Mai*_*r00 5 concurrency erlang functional-programming actor-model actor
我知道Erlang使用Actor模型来支持并发,而Erlang进程与Actors相同:它们发送消息,不可变等等.但根据Carl Hewitt的说法,Actor模型中的一个重要事项是非决定性和仲裁(给定仲裁者,你可以同时将多个输入(例如I0和I1)输入仲裁器,但只有一个可能的结果(例如O0)或O1)将在另一端出来).
所以,我很有意思,Erlang如何实现这个概念?Arbiters在Erlang并发模型/ actor模型实现中的作用是什么?
Ric*_*rdC 10
这是非常深刻的哲学(参见例如https://en.wikipedia.org/wiki/Indeterminacy_in_concurrent_computation),但据我所知,他说在演员模型中,每当演员有多个输入时,就会有一个魔术盒它以任何方式决定传入消息的顺序,即使这意味着延迟一些消息任意长(但有界)的时间.即,即使程序结构似乎偏向某个到达订单,您也永远不能依赖任何特定的订单或时间来接收并行消息.(请注意,这是关于演员程序推理的理论概念 - 除了测试目的之外,您不会尝试在实践中使系统不必要地随机化.)
Erlang消息传递的语义几乎相同:每当两个进程向第三个进程发送消息,并且对各个发送事件没有排序约束时,您永远不能依赖于哪个消息最先在接收者的邮箱.即使所有进程都在同一个Erlang VM中运行,它们也可以被任意延迟.再一次,这是关于什么保证你作为程序员(无),而不是让Erlang VM插入随机延迟.(随机延迟可以通过其他方式自然引入,例如页面错误的OS级别暂停.)
| 归档时间: |
|
| 查看次数: |
226 次 |
| 最近记录: |