【问题标题】:Choosing a consistency model for a concurrent programming language为并发编程语言选择一致性模型
【发布时间】:2009-05-09 15:27:11
【问题描述】:

我正处于编程语言的设计阶段,目前正在考虑并发方面。我需要弄清楚consistency model,即用这种语言编程的并发进程如何处理数据。

有两个重要的标准:

  • 我更喜欢易用性而不是性能,只要一致性模型允许良好的扩展性,
  • 我无法使用需要阻塞或动态内存分配的一致性模型。

我现在的两个候选人是非阻塞软件事务内存,一方面是复制消息传递语义而不共享 a la二郎。

我特别担心易用性,因此我将介绍我反对这两种模型的主要论点。

在 STM 的情况下,用户必须了解类的哪些成员必须以原子方式进行变异并正确界定原子代码段。这些必须写成可以重复未定义的次数,不能执行任何 I/O,不能调用一些外部函数等。我认为这对于没有经验的程序员来说远非易事。

Erlang 风格的无共享并发很有吸引力,但有一个问题:实时进程无法复制它们发送过来的对象,因为它们无法执行任何内存分配,因此对象必须从一个进程“移动”通过队列到另一个。用户必须知道,如果一个实时进程对一个对象有两个引用,那么如果他将对象发送到另一个进程,这两个引用都将被清除。这有点像弱指针,在任何使用点都可能为空,也可能不为空:这可能令人惊讶。

我倾向于第二种模型,因为它看起来更容易理解,并且自然地扩展到分布式系统。

你有什么推荐的?

  • 非阻塞软件事务内存?
  • 具有实时约束困难的 Erlang 样式并发?
  • 还有什么我没有考虑过的?

【问题讨论】:

    标签: concurrency language-design message-passing transactional-memory


    【解决方案1】:

    我在 Erlang 上做了一点,不多,但是尽管 share-nothing 消息传递范式对我来说是新的,但我想说它在视觉和物理方面很容易理解。

    如果你的语言要普及,我会说 Erlang 风格至少是我可以在没有太多工作的情况下围绕我的想法。我认为其他人将能够比 STM 方法更容易地学习和应用这种模型。

    我不是根据经验说话,但似乎 Erlang 模型更容易实现,因为它不必处理很多低级内存操作,您只需不共享任何内容,并管理进程之间的内存传递。

    【讨论】:

      【解决方案2】:

      我不认为单一的范式可以解决所有问题并且是不兼容的。例如,一个应用程序可以对程序的某些部分使用消息传递接口,对其他部分使用 STM,对其他更具体的部分使用直接锁定。

      你也可以看看Join calculus (JoCaml, Boost.Join),可以认为是消息传递接口的一种变体。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-10
        • 2018-11-06
        • 1970-01-01
        • 2016-01-12
        • 2010-12-25
        相关资源
        最近更新 更多