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

我正处于编程语言的设计阶段,目前正在考虑并发方面.我需要找出一个 consistency model,即如何通过用这种语言编程的并发进程处理数据.

有两个重要标准:

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

我现在的两个候选人一方面是非阻塞软件事务内存,并且在不共享la Erlang的情况下复制消息传递语义.

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

对于STM,用户必须了解类的成员必须原子地变异并正确地划分原子代码段.这些必须写入,以便它们可以重复不定义的次数,它们可能不执行任何I / O,可能不会调用某些外部函数等.我认为这对于没有经验的程序员来说很容易.

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

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

您有什么推荐的吗?

>非阻塞软件事务内存?
> Erlang风格的并发性与实时约束的困难?
>还有其他我没考虑过的事情?

我已经对Erlang做了一点,但并不多,但是虽然没有共享消息传递范例对我来说是新的,但我会说它在视觉和物理方面都很容易理解.

如果你的语言要广泛传播,我会说Erlang风格至少是我可以在没有太多工作的情况下解决的问题.我假设其他人将能够比STM方法更容易地学习和应用这种模型.

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

相关文章
相关标签/搜索