代码之家  ›  专栏  ›  技术社区  ›  Carl Seleborg

为并发编程语言选择一致性模型

  •  7
  • Carl Seleborg  · 技术社区  · 15 年前

    我正处于编程语言的设计阶段,目前正在考虑并发性方面。我需要找出一个 consistency model 也就是说,数据是如何被用这种语言编程的并发进程处理的。

    有两个重要标准:

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

    我现在的两个候选人是 非阻塞软件事务性内存 在一侧,以及 复制消息传递语义而不共享 洛杉矶 埃尔朗

    我特别担心易用性,所以我将介绍我对这两个模型的主要论点。

    在stm的情况下,用户必须理解类的哪些成员必须原子地变化,并且正确地划分原子代码部分。必须编写这些代码,以便它们可以重复不定义的次数,它们可能不执行任何I/O,也可能不调用某些外部函数等。我认为对于一个没有经验的程序员来说,这样做并不容易。

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

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

    你推荐什么?

    • 非阻塞软件事务性内存?
    • 二郎式并发与实时约束的难点?
    • 还有什么我没考虑的?
    2 回复  |  直到 14 年前
        1
  •  2
  •   Kekoa    15 年前

    我对Erlang做了一点,没有做太多,但是尽管对我来说没有什么共同的消息传递模式是新的,我会说,从视觉和物理的角度来说,这很容易理解。

    如果你的语言要广为流传,我会说二郎风格至少是我可以在不做太多工作的情况下把我的思想包起来的。我假设其他人能够比STM方法更容易地学习和应用这种模型。

    我不是从经验上讲的,但是看起来Erlang模型更容易实现,因为它不需要处理很多低级别的内存操作,您只需共享任何内容,并管理进程之间传递的内存。

        2
  •  1
  •   Vicente Botet Escriba    14 年前

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

    你也可以看一看联合微积分( JoCaml , Boost.Join ,可以视为消息传递接口的变体。

    推荐文章