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