.NET 4 Beta 1支持用软件实现的内存事务

2009 年 7 月 29 日

微软发布了.NET 4.0 Beta 1 的一个单独的新版本,其中包含了 STM.NET ,也就是 Software Transactional Memory 。通常我们使用基于锁的同步机制来控制对共享内存的访问,STM 则是锁之外的另一种选择。

微软将 STM.NET 定义为:

Software Transactional Memory(STM.NET)是一种可以高效隔离共享状态的机制。开发人员可以将一段代码标记为“原子”事务,并与其它并行运行的事务代码“隔离”开来。

内存事务(Transactional memory)在学术界被认为是一项有前途的技术,并且在当前利用多核硬件提高程序扩展性的大潮中,也做为一项受欢迎的技术被反复提及,其目的是使应用程 序开发人员可以利用 STM 的并发功能,将那些由专家开发的组件组合在一起,内存事务使这变得简单而安全。

STM 使用乐观并发机制来控制对共享内存的访问,在线程可以安全的修改共享数据前,不会一直阻塞线程,而是在线程访问共享数据时,将读写操作记录在日志 中。然后,它会检查是否有另一个线程正好在同一时刻访问共享数据。如果没有,这些改变将会被提交并永久生效;否则,事务将会被取消,所有的修改都将撤销。

STM.NET 使用 Atomic.Do() 将一段代码标记为一个事务:

Atomic.Do(()=> {

});

STM 与锁机制一样会导致系统性能降低,这是因为它需要维护读写日志,而且提交时会花费额外的时间。一些人认为 STM 比锁更容易使用,因此在易用性上的优势足以抵消性能上的降低。在一项名为《事务编程真的容易么?》的研究中,来自奥斯丁德克萨斯大学的 Christopher J. Rossbach、Owen S. Hofmann 和 Emmett Witchel 比较了 STM 与锁的学习和开发过程:

一般来说,内存事务比简单的锁需要更多的开发时间,但少于细致的锁和条件同步。

……我们发现在更复杂的情况下,简单的锁和事务所用的时间要少于细致的锁。这体现了事务的初衷,在需要多个锁的情况下,减少编码、调试和锁顺序的复杂性。

这项研究总结道:

这证明了即使新手在理解事务方面可能存在困难,但事务编程比高性能的锁更安全。对学生的主观评测显示,他们认为事务内存比简单的锁要难一些,但是比细致的 锁和条件同步简单。然而在学生写的代码中,同步错误的比率呈现出戏剧化的结果。对于相似的编程问题,使用事务比使用锁更容易得到正确的结果。

系统配置需求:Visual Studio 2008,Windows Installer 3.1 以上, Internet Explorer 5.01 以上。目前 STM.NET 只支持 C#。

相关资源: NET 4.0 Beta 1 with STM.NET , STM Programming Guide , STM: Samples, Documentation, and Configuration files .

查看英文原文:.NET 4 Beta 1 Now Supports Software Transactional Memory

2009 年 7 月 29 日 21:401077
用户头像

发布了 63 篇内容, 共 20.2 次阅读, 收获喜欢 1 次。

关注

评论

发布
暂无评论
发现更多内容

Grabana:使用 Golang 或 Yaml 生成 Grafana Dashboard

郭旭东

go golang Grafana

作为程序员,推荐5种编程语言!

代码制造者

Python 编程语言 低代码 C语言 零代码

架构师0期Week11作业2

Nan Jiang

深圳数字货币交易所开发商,币币撮合交易软件开发

13530558032

知乎李大海与阿里云贾扬清联合直播,AI大咖眼中的行业前景

InfoQ_967a83c6d0d7

代理,一文入魂

cxuan

Java 后端 代理

Week11

丿淡忘

架构训练营第十一周感悟

张锐

熔断、限流的一些理解

elfkingw

高可用注意点

dony.zhang

高可用 高可用系统的架构 高可用系统的运维

《精益创业》续

孙苏勇

随笔杂谈 精益创业

账户经常被盗号怎么办?防盗“黑科技”了解一下

华为云开发者社区

华为云 云安全 主机安全 双因子认证 弱密码

架构训练营第十一周作业

张锐

java安全编码指南之:基础篇

力软.net/java开发平台

针对目前在线教育存在问题的解决方案

anyRTC开发者

WebRTC 在线教育 直播 安卓

易实战Spring Boot 2 资源汇总 从入门到精通 内含实战github代码 毫无保留分享

John(易筋)

redis Spring Boot 2 RestTemplate thymeleaf HikariCP

力扣1514——概率最大的路径

健健

算法 最短路径

IDEA插件之Mybatis Log plugin破解!!!

不才陈某

Java idea插件

安全及高可用策略

Lane

极客大学架构师训练营

程序员不得不知的软技能

flyer0126

软技能

让这家有12万名员工、1.7万种产品的钢铁厂平滑上云的黑科技是什么?

华为云开发者社区

大数据 云服务 华为云 非对称加密 KYON

上手Elasticsearch

北漂码农有话说

OFD 版式技术解析系列(四):OFD文档解析流程

华宇法律科技

版式文档 OFD

解码微盟半年财报:同比增长59.9%,SaaS商业版图不断扩大

ToB行业头条

SaaS 微盟

Lambda架构已死,去ETL化的IOTA才是未来

易观大数据

一款JAVA快速开发平台,多项目整合,给开发提提速

力软.net/java开发平台

「Java 25周年」 工具软件 平台应用服务

源码解析 | 万字长文详解 Flink 中的 CopyOnWriteStateTable

Apache Flink

flink

合约跟单APP开发模式,合约跟单系统源码搭建

13530558032

一个用户秘密加密验证功能

elfkingw

架构师0期Week11作业1

Nan Jiang

USDT承兑商系统开发,USDT支付系统软件搭建

13530558032

.NET 4 Beta 1支持用软件实现的内存事务-InfoQ