写点什么

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

  • 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:411268
用户头像

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

关注

评论

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

APICloud AVM 框架 纵向滚动通知栏组件

YonBuilder低代码开发平台

设计模式之建造者模式

游坦之

设计模式 java 编程 10月月更

每个系统管理员都应该知道的 6 个 Linux 网络命令

wljslmz

Linux 网络命令 10月月更 系统管理员

Serverless应用架构转型

阿泽🧸

Serverless 10月月更

前端页面之“回流重绘”

CoderBin

CSS html 面试 前端 10月月更

【GOF】三种工厂模式~

游坦之

设计模式 java 编程 10月月更

Kubernetes Pod 底层实现方式

CTO技术共享

Kubernetes 个人成长 pod 10月月更

【愚公系列】2022年10月 Go教学课程 031-结构体方法

愚公搬代码

10月月更

一起聊服务架构的演进过程

南极仙翁

架构 技术 后端 服务架构

彻底搞懂JS原型与原型链

hellocoder2029

JavaScript

从0到1实现一套CICD流程之CD

okokabcd

后端

数字化时代,企业知识管理软件应该怎么选

Baklib

知识管理 企业知识管理工具 知识管理系统

朋友圈架构设计

Jack

架构实战训练营9期

K8s Helm 微服务部署利器

CTO技术共享

Kubernetes 个人成长 Helm 10月月更

SAP | abap基本语法规则

暮春零贰

SAP abap 10月月更

千锋小狮视觉“未来设计师就业实战训练营”圆满收官,2周年庆即将开启!

千锋IT教育

企业团队知识如何管理?来试试这个办法!

Baklib

效率 效率工具 知识管理 团队

BizWorks助力企业应用的高效开发与复用

阿里云E2企业云服务

阿里云 开发者 云原生 低代码

华为王泽锋:协作创新、开源的魅力所在

科技热闻

Kubernetes能否帮助解决自动化

CTO技术共享

Kubernetes 个人成长 10月月更

java的可变参数

TimeFriends

满足客户需求,提高客户体验:在线产品手册

Baklib

产品 推广 客户 客户体验 在线产品手册

设计模式之桥接模式

游坦之

设计模式 java 编程 10月月更

【Vue】悬浮窗和聚焦登录组件经验总结

游坦之

前端 vue2 10月月更

【从0到1学算法】7.直接插入排序

Geek_65222d

10月月更

cstdio的源码学习分析10-格式化输入输出函数fprintf---宏定义/辅助函数分析05

桑榆

源码刨析 10月月更 C++

远程办公提高效率的工具:在线协作文档

Baklib

效率 效率工具 协作文档

【Vue】Axios详解

游坦之

前端 axios vue2 10月月更

从《三体》到Silkpunk,这些中式科幻用什么打动了西方人?

脑极体

分布式协调服务的存在意义

穿过生命散发芬芳

分布式协调 10月月更

JS Array数组几个循环实用方法总结

MegaQi

JavaScrip 10月月更

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