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