AI 年度盘点与2025发展趋势展望,50+案例解析亮相AICon 了解详情
写点什么

软件性事务:一种编程语言的视角

  • 2008-03-25
  • 本文字数:1420 字

    阅读完需:约 5 分钟

Erlang,一种可以让并发兼得优美与效率的语言,最近受到了很大的关注。特别是人们把Erlang 看作是多核处理器下的一种自然编程语言。Erlang 的一个核心设计概念就是“进程”实例之间没有共享存储,它们的通信只能依靠异步消息。然而,共享存储形式的并发仍然是一个强势的研究课题。

上周,UWTV 的Dan Grossman 发布了一段 Webcast ,“软件事务:一种编程语言的视角”。它展示了事务性存储的当代最新发展。Dan 还在Google 和UC Berkeley 做了相关的报告。

Dan Grossman 是华盛顿大学计算机科学与工程学院的一名助理教授。他的研究领域包括编程语言的设计、实现和理论。

Dan 的报告所关注的是事务对于编程语言的语义和实现会带来哪些影响,并探讨了可伸缩的多线程事务的发展:

多核处理器会引爆并行计算,因此当务之急是降低并发编程的难度。为了简化共享存储形式的并发,软件性事务(Software Transaction)承载了太多承诺,它在最近的十多年里受到了来自研究团体的强烈关注。

他还在事务性存储和垃圾回收之间做了一个有趣的对比:

事务性存储(TM)之于共享存储并发犹如

垃圾回收(GC)之于内存管理

他解释说,并发编程的困难类似于内存管理,你需要平衡正确性和性能。他也讨论了非模块化的调用者和被调用者之间必须知道彼此,因此通常一个微小的修改都会导致大规模的代码变化。

他认为问题的解决方案是把手动编码的协议迁移到语言的实现中,就像 GC 一样,尽管他也承认事务性存储不是一个完善的解决方案,比如遇到下面这种情况时:

内存冲突严重到近乎无法并行执行的程度。

Dan 为三种不同的隔离级别引入了源码级的形式化语义:

  • “强(Strong)”:如果一个线程在执行一个事务,那么没有其他的线程可以使用共享存储或者进入这个事务。
  • “弱 -1- 锁(Weak-1-lock)”:如果一个线程在执行一个事务,那么没有其他的线程可以进入这个事务。
  • “弱 - 撤销(Weak-undo)”:与“弱 -1- 锁”相同,并且允许事务在任何点异常中断,然后撤销修改并重新启动。

他提起了一个被广泛误解的概念:

“弱”隔离只有在相应的锁代码中存在竞争时才会违反“all-at-once”特征。

接下来,Dan 提出了几个关键的定理,包括下面这个:

“弱 - 撤销”允许某些“弱 -1- 锁”不允许的行为

在他报告中的第二部分里,开始关注如何把这些语义应用到多核系统中。首先,Dan 指出了单处理器是一种重要的特例:

  • 通过共享存储进行通讯的多个线程不能真正地并行执行
  • 很多编程语言的实现都假设单处理器的存在
  • 多核系统为应用程序分配单个核

Dan 认为在单处理器体系结构下,实现事务性存储的强隔离只需要很小的开销。因为内存访问的开销很低,而且回滚操作很少。另外只有写操作才被记录下来。他还提供了一些可以应用在字节码级的静态优化的例子,这种优化能够提升非事务性代码的性能。

Dan 的团队正在研究多线程下的事务。他对一个被普遍认可的重要假设提出了质疑:

大多数语言实现都假设事务中执行的代码是单线程的,但是隔离和并发是两个互不影响的概念( Amdahl 定律将受到多核的冲击)。

Dan 认为有很多理由可以做这样的假设,因为它能简化实现。随着芯片内核的数量的增加,这个假设会导致系统性能的下降。如果不做这样的假设,你需要在语言层面上引入内嵌的事务。他还指出,为了获得可伸缩的能力,必须解决 logging 操作的并行化这个重要问题。Dan 还想知道什么时候才真正需要修正 Amdahl 定律,他猜测可能是在核的数量达到几百个的时候。

查看英文原文: Software Transactions: A Programming Language Perspective

2008-03-25 00:41935
用户头像

发布了 53 篇内容, 共 13.5 次阅读, 收获喜欢 2 次。

关注

评论

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

第十周作业

方堃

微服务

石刻掌纹

数据中台建设方法论

数据社

大数据 数据中台

架构师训练营 week10 homework

Nick

anyRTC 4.0 以心铸造,以梦相承

anyRTC开发者

anyRTC 4.0 官网升级

django-admin和manage.py用法

BigYoung

Python django django-admin manage.py

Django如何编写自定义manage.py 命令

BigYoung

Python django manage.py

报警不响,黄金万两的“稳定性成熟度”干货

滴滴普惠出行

微服务和DDD总结

周冬辉

微服务 DDD

week10 学习总结

任小龙

只加两行代码,为什么用了整整两天时间?

程序员生活志

编程 bug

Flink 支持的重启策略有哪些

奈学教育

flink

微服务架构的思考

Season

华章科技好书5折优惠,满99再减10元

华章IT

Python AI 数字化转型 Java 25 周年 计算机科学丛书

凉了!张三同学没答好「进程间通信」,被面试官挂了....

小林coding

操作系统 计算机基础 进程

CDH部署指南

数据社

大数据 CDH

解决 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED

邵俊达

Linux SSH

央行清算总中心与三家银行签署区块链福费廷交易平台合作协议

CECBC

区块链技术 人民银行

35岁腾讯员工被裁员感叹:北京一套房,存款700多万,失业好焦虑

程序员生活志

程序员

关于微服务架构的思考和认知

任小龙

Kubernetes 网络通讯模型解析

ninetyhe

架构师训练营 week10 summary

Nick

架构师训练营第十周作业

一剑

Flink 支持的重启策略有哪些

古月木易

flink

一文了解greenplum

数据社

数据库 greenplum MPP

聊聊数据库

数据社

数据库 大数据

一周信创舆情观察(8.3~8.9)

统小信uos

Jira 和 Confluence 企业最佳部署方式

Atlassian

项目管理 敏捷开发 Atlassian Jira

什么是死锁?如何解决死锁?

奈学教育

数据库的那些事

数据社

数据库 大数据

什么是死锁?如何解决死锁?

古月木易

死锁

软件性事务:一种编程语言的视角_架构_Jean-Jacques Dubray_InfoQ精选文章