【问题标题】:How to "share state" with Erlang Style Concurrency?如何使用 Erlang 风格的并发“共享状态”?
【发布时间】:2010-10-15 00:18:09
【问题描述】:

Erlang 使用并发模型来处理参与者之间的消息传递。

假设我有 3 位演员出售物品。商品总数为 7。他们是如何准确销售 7 件商品的?他们如何协调自己?我们可以有一个具有可用项目数量的参与者,根据“购买”消息(库存参与者)进行操作。不过,这将是一个SPOF

当使用消息队列而不是锁来实现并发时,Java 等其他语言中的并发也是如此。

(最好没有 Amdahl 瓶颈)

【问题讨论】:

    标签: concurrency erlang


    【解决方案1】:

    您有一个代表事物的流程 - 在本例中为库存。其他流程要买的时候,他们问库存,你有吗?可以买吗?

    代表交付的流程会告诉库存,这里有 20 个新事物...

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 啊,太好了。具体的回答,推特上的人只是冷笑。但是像 Mnesia 表这样的中心资源会不会是“Erlang 并发”,它看起来更像是一个共享资源(比如使用数据库来共享状态)? (但在 Erlang 中,作为主管树的一部分的专业人士)
      • 是的,Erlang 也知道进程、表或数据库形式的共享资源。但它使使用它们变得简单和节省。消息队列处理同步问题,监督关心重启,Mnesia 知道不同节点上的复制。你必须关心,但你会得到帮助。
      • 您甚至可以在没有管理表的进程的情况下逃脱,因为无论如何 Mnesia 就是这样做的。如果您使用事务,您将确保表自动更新。
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-06
        • 2012-04-14
        • 2020-12-19
        • 2021-12-17
        • 2011-04-30
        • 1970-01-01
        • 2010-11-01
        • 2020-08-02
        相关资源
        最近更新 更多