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

Concurrency 为并发编程语言选择一致性模型,concurrency,language-design,message-passing,transactional-memory,Concurrency,Language Design,Message Passing,Transactional Memory,我正处于编程语言的设计阶段,目前正在考虑并发方面。我需要解决一个问题,即用这种语言编程的并发进程如何处理数据 有两个重要标准: 我更喜欢易用性而不是性能,只要一致性模型允许良好的扩展 我不能使用需要阻塞或动态内存分配的一致性模型 我现在的两个候选者是非阻塞软件事务内存,另一个是复制消息传递语义而不共享一个la-Erlang 我特别担心易用性,因此我将介绍反对这两种模型的主要论点 在STM的情况下,用户必须理解类的哪些成员必须在原子上发生变化,并正确地划分原子代码部分。必须编写这些函数,以便它

我正处于编程语言的设计阶段,目前正在考虑并发方面。我需要解决一个问题,即用这种语言编程的并发进程如何处理数据

有两个重要标准:

  • 我更喜欢易用性而不是性能,只要一致性模型允许良好的扩展
  • 我不能使用需要阻塞或动态内存分配的一致性模型
我现在的两个候选者是非阻塞软件事务内存,另一个是复制消息传递语义而不共享一个la-Erlang

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

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

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

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

你推荐什么?

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

我对Erlang做了一些工作,但做得不多,但尽管不共享消息传递范式对我来说是新的,但我想说,它很容易从视觉和物理角度理解

如果您的语言要广泛使用,我想说,Erlang风格至少是我可以不用做太多工作就可以理解的东西。我假设其他人能够比STM方法更容易地学习和应用这种模型


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

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

您还可以查看连接演算(,),它可以被视为消息传递接口的变体