写点什么

微软对软件内存事务的试验已告终止

  • 2010-05-31
  • 本文字数:1633 字

    阅读完需:约 5 分钟

Dana Groff 宣布,微软对.NET 框架上软件内存事务(software transactional memory,简称 STM.NET)的试验已告终止。这个研究项目始于 2008 年,被用于在处理并发问题时代替显式锁。

理论上 STM 和数据库事务很相似。理想情况下,多个线程不能同时访问同一块数据,脏读将不复存在,死锁则会被自动监测和处 理。然而这也带来了和数据库事务同样的问题,比如乐观锁还是悲观锁,锁的粒度以及对性能的影响。

相对于其它软件,数据库在数据的组织形式上具有优势。数据库中的行是原子单位,可以被当作一个整体进行加锁,读取和修改。并且由于每一行都被存储在固定的 位置,使得锁升级这样的技术得以实现,以避免过多细粒度锁。而在其它软件中,对象需要通过指针链来找到根对象,这导致语义分组无法使用,并引发这样的问 题:“在这种情况下,原子单位是什么?”

早在一月,微软最知名的并行与并发编程研究员 Joe Duffy,就在他的内存事务简要回顾中谈到了他对 STM 开始失望的四个原因。

第一个原因是 I/O 问题。大多数的 I/O 访问机制天生就是非事务性的,而且随着分布式计算的流行,这些问题更加不可避免。Joe Duffy 指的不仅是文件访问,还包括日志、web service 调用、用户交互以及平台间互操作。他还说到:

这个问题最终归结为:今后的趋势会是事务性的,还是非事务性的? 继续大力推广事务是否可以取得成功,本质上取 决于这个问题的答案。我们曾将支持事务的 NTFS 和注册表添加到 Vista,那时候这个问题的答案似乎是“事务性”。但是(目前)这个趋势却在急剧放缓。

第二个问题是关于原子性强弱的选择。简单来说就是,你要求事务性对象只能通过事务进行读写,还是把决定权交给开发人员。前一种方式在程序的事务性部分和非 实物性部分共享数据时会遇到麻烦,而后一种则非常容易引发错误。

第三个原因是边界问题。就像我刚才说的,一般的软件不像数据库那样有着清晰的边界。对于原子单位的定义可能会随着时间而改变。

我仍然清晰的记得那天,就好像是昨天一样。那是一个周项目例会,讨论项目的状况、未来、遇到的问题等等。一个暑期实习大学生喝着咖啡,用 TM 做着一些探索 工作,而我则喝着茶。某个实习生不经意的言语,指出了(系统的)一个毁灭性的缺陷,足以威胁到我们正在构建的(也是当时业界普遍使用的)TM 模型。这个问 题实际上已经存在一年多了,但我们却一直没发现。这就是哪种让我感到害怕,并使我相信正规计算机科学的时刻。 事务 Tx0 将 itIsOwned 设为 true 并提交,而在提交后 Tx0 将会在 TM 的范围外使用任何已被声明的状态(在这里指的是变量 x 所指向的对象)。同 一时刻,另一个事务 Tx1 乐观的读取 itIsOwned 值并得到 false,因此继续使用 x。对于实时更新的系统,这将允许这个事务(Tx1)无限制的任 意修改 x 的状态。当然在本例中由于 isItOwned 被修改为 true,Tx1 将会被回滚。但这已经太晚了:另一个在事务外使用 x 的线程将会看到 x 的状态 在不停的改变,从这时起谁也无法知道将会发生什么。这是一个在任何弱原子性、实时更新 TM 中都存在的缺陷。

这个例子并不是人为设计的,在很多情况下都会发生类似的事情。我们第一次发现这个问题的情形是,当一个事务从链表中移除结点时,另一个事务正在反转这个链 表。如果前一个线程相信它”拥有”这个被移除的结点,因为就是它自己将这个结点移除的,那么将得到不可预期的结果。

最后一个原因是 STM 缺少实际的成功案例,他写道:

我们一直在苦苦寻找杀手级的 TM 应用。当然将范围仅放在 TM 上不太公平,因为整个业界仍在寻找杀手级的并发应用。但后来我们发现的成功案例越多,我对今后 5 年内杀手级并发应用需要 TM 的信心就越少。对于大多数自然隔离的程序,例如那些处境尴尬的并行图像处理程序,如果有任何共享数据,那基本上就是有问题 了。

与其他很多微软研究项目一样,STM.NET 的代码和示例已经被撤下,论坛也将于近期关闭,只剩下 STM 编程手册与我们同在。

查看英文原文: Microsoft’s Experiments with Software Transactional Memory Have Ended

2010-05-31 08:463015
用户头像

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

关注

评论

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

8月征文:今天你 ARTS 打卡了吗?【中奖名单见文末】

InfoQ写作社区官方

ARTS 打卡计划 征文活动 热门活动

Jupyter Notebook 遇上 NebulaGraph,可视化探索图数据库

NebulaGraph

AI Jupyter Notebook 图数据库

平台赋能技术创新,和鲸科技持续助力气象顶尖算法大赛

ModelWhale

人工智能 算法 气象 大气科学 在线编程

Hybrid技术的下一站是什么?

FinFish

Hybrid 小程序技术 小程序容器技术 Hybrid App

技术创新、鸿蒙赋能,华为阅读带来全新商业机会

最新动态

Last Week in Milvus

Zilliz

非结构化数据 Milvus Zilliz 版本更新 AIGC

企业文件传输软件安全性分析与对比

镭速

文件传输软件

PoseiSwap 开启“Poseidon”池,治理体系或将全面开启

西柚子

5分钟,带你了解低代码开发

高端章鱼哥

低代码 数字化转型 应用开发

软件测试 | Java设计模式——适配器设计

测吧(北京)科技有限公司

测试

基于Vue构建低代码平台的思考

互联网工科生

Vue 低代码 表单 JNPF

Nevercenter CameraBag Photo for Mac(照片滤镜软件) 2023.3.0激活版

mac

苹果mac Windows软件 Nevercenter CameraBag 相机和滤镜应用程序

PoseiSwap 开启“Poseidon”池,治理体系或将全面开启

大瞿科技

软件测试/测试开发丨Python 内置库 json

测试人

Python json 软件测试

瓴羊Quick BI在Gartner魔力象限中脱颖而出

夜雨微澜

融云:从「对话框」跳进魔法世界,AIGC 带给社交的新范式

融云 RongCloud

人工智能 AI 通信 社交 AIGC

什么是CAE软件?哪个CAE软件好用?

智造软件

CAE 仿真软件 CAE软件

软件测试/测试开发丨Python 内置库 日期与时间处理

测试人

Python 软件测试 内置库

关于文件传输软件和传输大文件你需要知道的一切

镭速

传输大文件

不可错过!12个编写整洁Java代码的最佳实践方法

飞算JavaAI开发助手

golang trace view 视图详解

蓝胖子的编程梦

golang Profile pprof Trace go tool

华为与二十多家伙伴达成游戏先锋合作,共筑鸿蒙生态繁荣

最新动态

全网首档操作系统探访体验栏目“龙蜥+超级探访”震撼上线!看国产 OS 如何乘风破浪

OpenAnolis小助手

开源 操作系统 龙蜥 统信软件 超级探访

自动化实践-全量Json对比在技改需求提效实践

得物技术

json 自动化 测试 企业号 8 月 PK 榜

软件测试 | 设计模式——代理设计

测吧(北京)科技有限公司

测试

使用 Signia 实现 React 状态管理

高端章鱼哥

React Signia

华为阅读与商务印书馆达成全面合作 携手传承中外经典名著

最新动态

文件传输软件的市场现状和未来趋势

镭速

文件传输软件

恭喜!杭州悦数成为「大数据技术标准推进委员会」2023 年度合作伙伴

悦数图数据库

数据库 图数据库 NebulaGraph

微软对软件内存事务的试验已告终止_.NET_Jonathan Allen_InfoQ精选文章