与参与者模型和锁相比,什么是事务内存

what is transactional memory in comparison to actor model and locks

与基于 actor 和基于锁的同步相比,事务内存是多少?

据我了解是另一种并发控制机制。或者它是完全不同于演员、事件、锁等的东西?

事务内存 (TM) 是一种无锁同步方法。在基于锁的同步机制中,一个线程获取锁并进入同步块,而其他线程等待锁可用。在 TM 中,线程不等待锁,它们中的每一个都继续运行,就好像锁可用一样。但是为了保证执行的正确性,所有在synchronized块内部的内存访问都是推测性的。一旦执行到达同步区域的末尾,线程就会相互通信并共享读取和写入的内存位置(在 TM 术语中称为读取集和写入集)。如果一个线程读取了另一个线程推测写入的内存位置,则发生了冲突,将进行冲突解决。最后,如果两个或多个线程没有冲突,它们都可以继续并使用推测性写入更新内存。尽管实施涉及复杂性,但您可以通过编写类似于粗粒度锁的程序获得更细粒度锁定(基于内存位置)的优势(您只需要指定事务的开始和结束)。

有许多 TM 系统基于您如何进行数据版本控制(原始数据与推测数据)和冲突解决(渴望 - 随手做,懒惰 - 最后做)。还有它们在(硬件、软件、HyBrid)中实现的平台。

我不太擅长基于角色的并发。以我有限的知识,它似乎是通过向其他演员发送消息来工作的,并且每个演员都完成被要求做的工作,并在需要时创建更多演员。所以我想从概念上讲,它类似于分而治之的编程风格,在这种编程中,工作是即时创建的,并在可用的参与者之间传递。这种类型的范例类似于函数式编程,与需要同步的传统共享内存风格正交。因此我猜,基于 actor 的模型不需要锁或无锁同步,因为它们本质上是并行的。