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

7
我正在设计一种编程语言,目前正在考虑并发方面。我需要确定一致性模型,即在使用该语言编写的并发进程中如何处理数据。
有两个重要标准: - 我更喜欢易用性而不是性能,只要一致性模型允许良好的扩展。 - 我不能使用需要阻塞或动态内存分配的一致性模型。
我的两个候选者是非阻塞软件事务内存没有共享的复制消息传递语义(类似于Erlang)。
我特别担心易用性,因此我将介绍我对这两种模型的主要反对意见。
在STM的情况下,用户必须理解哪些类成员必须原子地变异,并正确地界定原子代码段。这些必须编写得可以重复无限次,它们可能不执行任何I/O,也可能不调用某些外部函数等。我认为这对于一个非经验丰富的程序员来说远非易用。
Erlang风格的无共享并发很有吸引力,但是有一个问题:实时进程不能复制它们发送的对象,因为它们不能执行任何内存分配,所以对象必须通过队列从一个进程“移动”到另一个进程。用户必须意识到,如果一个实时进程对一个对象有两个引用,那么如果他将该对象发送到另一个进程,这两个引用都将被清除。这有点像弱指针,在使用的任何时候可能是null或非null:这可能会令人惊讶。
我倾向于第二种模型,因为它似乎更容易理解,并且自然地扩展到分布式系统。
你推荐什么?
- 非阻塞软件事务内存? - 具有实时约束困难的Erlang风格并发? - 我没有考虑过的其他东西?
2个回答

2
我对Erlang有一些了解,虽然不是很多,但由于“共享无”的消息传递范式是新的,所以我认为从视觉和物理角度来说它很容易理解。
如果你的语言要广泛应用,我认为Erlang模式至少是我可以轻松掌握的。我认为其他人也会更容易学习和应用这种模型,而不是STM方法。
虽然我没有经验,但似乎Erlang模型更容易实现,因为它不必处理很多低级内存操作,只需共享空间,并在进程之间管理内存传递。

1

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

你还可以看一下联合演算(JoCamlBoost.Join),它可以被视为消息传递接口的一种变体。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接