如何与Erlang Style Concurrency“共享状态”?

时间:2009-03-23 16:11:50

标签: concurrency erlang

Erlang使用actor之间的消息传递作为并发模型。

假设我有3个销售商品的演员。项目总数为7. 他们如何精确销售7件物品?他们如何协调自己?我们可以让一个演员拥有可用物品的数量,作用于“购买”消息(库存演员)。这可能是 SPOF

在使用消息队列进行并发而不是锁定时,Java等其他语言的并发性也是如此。

(最好没有 Amdahl 瓶颈)

3 个答案:

答案 0 :(得分:3)

你有一个代表事物的过程 - 在这种情况下是一个库存。当其他流程想要购买时,他们会询问库存,您有吗?我可以买吗?

代表交货的流程会告诉库存,这里有20件新东西......

答案 1 :(得分:2)

我会实施一个负责库存管理的服务器流程,例如:使用dets或Mnesia表作为后端。此过程可能是监督树的一部分,因此如果失败,它将自动重新启动。我的推销员流程 - 您上面提到的3个演员 - 与此服务器进程通信,询问他们销售的商品。只要有足够的物品就没有问题,否则销售人员会得到物品售罄的答案 - 而另一个程序会获得购买新物品的信息。

答案 2 :(得分:1)

这些演员是否在真空中行事?他们必须有7个买家或7个库存商品。也许排队的买家或库存商店应该协调它们。