与基于actor和基于锁的同步相比,事务内存是多少?
据我了解,这是另一种并发控制机制。或者它与演员、事件、锁等完全不同?
Transactional Memory (TM) 是一种无锁同步方法。在基于锁的同步机制中,一个线程获取锁并进入同步块,而其他线程等待锁变为可用。在 TM 中,线程不会等待锁,它们中的每一个都会继续,就好像锁可用一样。然而,为了确保执行的正确性,所有在同步块内进行的内存访问都是推测性的。一旦执行到达同步区域的末尾,线程就会相互通信并共享读取和写入的内存位置(在 TM 术语中称为读取集和写入集)。如果一个线程读取了另一个线程推测性写入的内存位置,则发生冲突并且将发生冲突解决。到底,如果两个或多个线程没有冲突,它们都可以继续,并且将使用推测性写入来更新内存。尽管实现涉及复杂性,但通过编写类似于粗粒度锁的程序(您只需要指定事务的开始和结束),您可以获得更细粒度的锁定(基于内存位置)的优势。
有几十个 TM 系统基于您如何进行数据版本控制(原始数据与推测数据)和冲突解决(急切 - 随心所欲,懒惰 - 最终完成)。也是它们在(硬件、软件、HyBrid)中实现的平台。
我不太擅长基于演员的并发。以我有限的知识,它似乎是通过向其他演员发送消息来工作的,每个演员都会做它被要求做的工作,并在需要时创建更多的演员。所以我想从概念上讲,它类似于分而治之的编程风格,工作是动态创建的,并在可用的演员之间传递。这种类型的范例,类似于函数式编程,与需要同步的传统共享内存样式正交。因此我猜,基于actor的模型不需要锁或无锁同步,因为它们本质上是并行的。