Transactional Memory
这个概念是从数据库中借来的。一个Transaction应该具有ACID的特性。
随着处理器发展的趋势,高质量的并发程序越来越重要。目前,编译器可以自动并行化程序的情况还比较有限,大量的并发程序是由程序员写出来的。对于并发程序中共享资源的控制,基本上都是基于锁机制的。对于这样的并发程序,开发的难度是很大的。普遍认为,开发并发程序的工作量是同样的单线程程序的三倍。
而Transactional Memory则提出了另外一种解决问题的方法。
其基本的想法是:程序员可以指定某一段程序(可以包含嵌套的函数调用)对Memory的操作为一个Transaction,这段程序在执行的时候,在别的部分看来,它满足数据库中Transaction的A(原子)C(并发)I(独立)的性质(不包括性质D(永久))。更详细一点说,如果atomic关键字用于指定Transaction,那么
atomic{
op1;
op2;
op3;
...
}
代码段执行起来就像一个原子:好像整个系统中只有一个线程在执行它,并且从头执行到尾。对于TM的实现,一般采用的是“乐观的同步”思想。当一个Transaction可以执行的时候,就执行它。而且在这里并不会去锁住某个锁。但是,执行这个Transaction的线程必须有一个线程局部的log,对于Transaction中访问到的每一个“共享”变量,在第一次访问时需要记下它的原始值,之后,记录下所有对它的读和写操作。对共享变量的写操作并不会真的去写变量,而只是记录在log中。当Transaction执行结束时,需要进行提交。这是,运行时系统再次去检查共享变量的值,如果所有的共享变量的当前值和log中记录的原始值一样(没有被别的线程修改过),则Transaction成功提交,将log中的对共享变量的最终修改写到共享变量中。否则,提交失败,运行时系统自动地清除空该Transaction的log,然后重新执行这个Transaction。
单从接口而言,TM的方法比加锁的方法更容易使用。此时,程序员不需要自己去指定程序如何并行,而只需要指定一些必须原子完成的代码段,并行性由运行时系统自动的发现并加以利用(运行时系统可以根据数据依赖来决定某个Transaction是否可以运行,并为每一个可以运行的Transaction分配一个单独的线程)。
事实上,Transactional Memory还是有些问题的。第一,对于一般常用的命令式的语言,编译器很难自动的,准确的分析出那些变量是“共享”变量,那些变量是线程私有的变量。为了保证正确性,只好做一些保守的假设,于是,在一个Transaction的执行过程中会有大量的读写内存的操作被记录在log中,导致的效率的低下。
对于这个问题,有两种解决方法。第一,用硬件实现Transactional Memory的支持,使得log是自动记录的。
而我认为更好的另外一个方法是,使用类似于Haskell的纯粹的函数式语言。对于纯粹的函数式语言,计算是没有副作用的。而用于在线程间交换数据或记录状态的“可变”实体,都被显式地封装在Monad中了,所以,很容易从一个Transaction中分辨出这些Monad。那么在记录log的时候,只要关注这少量的几个变量就可以了,其他的都是无副作用的函数,无论怎么计算,得到的结果都会相同。这样,就可以使用软件高效的实现Transactional Memory。
在并发程序设计越来越重要的现在,程序员的工具仍然是Lock或是Message之类的东西,外加上一个线程库。当然,有很多人致力于怎么定义更好的接口,开发更方便的辅助工具,但是,我们仍然没有一套像“结构化程序设计”或是“面向对象程序设计”那样的方法学来进行并发程序的设计。也许Transactional Memory仍然不会很理想,但是至少是“无穷黑暗中的一丝曙光”......
推荐文章“Composable Memory Transactions”
http://blog.chinaunix.net/u/18369/showart_527764.html
分享到:
相关推荐
PDF 高清 Rachid Guerraoui, Michal Kapalka, "Principles of Transactional Memory (Synthesis Lectures on Distributed Computing Theory)" ISBN: 1608450112
《事务内存(Transactional Memory):理解并行编程的新范式》 事务内存(Transactional Memory,简称TM)是一种在多核处理器时代重新引起关注的并行编程技术,它为协调并发线程提供了一种可能更优越的方法。TM的...
### 事务内存(Transactional Memory) #### 一、事务内存概述 事务内存(Transactional Memory, TM)是一种编程模型和实现机制,旨在简化并发程序中的数据共享和同步问题。随着多核处理器时代的到来,如何有效地...
事务内存(Transactional Memory,TM)是一种并发控制机制,旨在简化多线程编程,尤其是在多核处理器架构中。在传统的并发编程中,程序员需要手动管理锁或者其他同步原语,以确保数据的一致性和正确性。然而,事务...
《Transactional Memory》这本书是关于计算机架构合成讲座系列的一部分,由James R. Larus和Ravi Rajwar撰写,于2007年出版。这本书深入探讨了事务性内存(Transactional Memory,简称TM)这一关键的计算机系统设计...
Hardware Transactional Memory on HaswellViktor LeisTechnische Universität München1 / 15IntroductionI transactional memory is a very elegant programming modeltransaction { transaction { a = a − 10; ...
#### 一、硬件事务内存(Hardware Transactional Memory, HTM)概述 硬件事务内存(Hardware Transactional Memory, HTM)是一种用于支持并发控制的技术,它允许处理器自动管理多线程环境下的数据一致性问题。通过...
HARDWARE TRANSACTIONAL MEMORYCS4021/4521 :copyright: 2017 jones@tcd.ie School of Computer Science and Statistics, Trinity College Dublin 24-Nov-17 1Hardware Transactional Memory• transactions ...
ProgrammingWhile still primarily a research project, transactional memory shows promise for making parallel programming easier.Transactional MemoryACM QUEUE September 2008 39 more queue: ...
多线程使用很普遍,但是存在许多问题,比如死锁,内存屏障,饥饿等。把事务模型作为一个通用的编程模型,作为解决事务的一个新思路。
The Transactional Memory / Garbage Collection AnalogyDan GrossmanUniversity of Washingtondjg@cs.washington.eduAbstract This essay presents remarkable similarities between transac- tional memory and ...
Debugging Programs that use Atomic Blocks and Transactional MemoryFerad Zyulkyarov†∗ Tim ...atomic blocks and transactional memory (TM) is becoming more attractive. This paper describes our experi
and Siddhartha ChatterjeeThe overhead posed by STM may likely overshadow its promise.TM (transactional memory)1 is a concurrency control paradigm that provides atomic and isolated execution for ...
Hardware Transactional Memory (HTM) offers a powerful new parallel synchronization mechanism, but one whose performance properties are different from techniques that it competes with, such as locks ...