2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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

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

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

关注

评论

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

BOE(京东方)亮相数字中国 “三驾马车”加速物联网战略转型

爱极客侠

6 张图带你彻底搞懂分布式事务 XA 模式

阿里巴巴云原生

Java 数据库 云原生 存储

如何快速准备高质量的AI数据?

华为云开发者联盟

AI 数据 华为云 modelarts 数据标注

软件 IT 专业的高校大学生创新创业问卷调查

五分钟学大数据

问卷调查

硬核系列 | 手写脚本语言编译器

九叔(高翔龙)

Java 编译器 脚本语言 词法分析器 编译器原理

拍立淘创始人潘攀博士为你揭开“以图搜图”的神秘面纱!

博文视点Broadview

全球案例 | Dropbox: 在 COVID-19 时代通过 Atlassian 为远程工作提供动力

Atlassian

DevOps 敏捷 远程办公 Atlassian Jira

老爷子这代码,看跪了!

why技术

Java

Golang easyjson

escray

学习 极客时间 Go 语言 4月日更

20年研发安全积累,5大研发安全能力让软件“天生安全”

华为云开发者联盟

DevOps 安全 DevSecOps 华为云 devcloud

新疆重点人员管控系统搭建,指挥调度系统开发

连续三年入围 Gartner 容器竞争格局,阿里云容器服务新布局首次公开

阿里巴巴云原生

容器 运维 云原生 k8s 边缘计算

干货拉满!阿里公开内部P9级架构师(Java)成长路线图,满满的干货

Java架构追梦

Java 阿里巴巴 架构 面试 成长路线

基于区块链技术的去中心化自治组织——核心属性、演进脉络与应用前景

CECBC

区块链

Java-技术专题-多线程顺序执行的8种方案实现

码界西柚

Java 并发编程 AQS 多线程 JUC

应“云”而生的 Java 框架 Quarkus:构建小而快的镜像

张晓辉

Java Docker Serverless CloudNative Quarkus

Rust从0到1-代码组织-路径

rust 路径 代码组织 paths

全球案例 | Dropbox: 在 COVID-19 时代通过 Atlassian 为远程工作提供动力

Atlassian

敏捷 Atlassian Jira 远程工作 Dropbox

FusionInsight MRS:你的大数据“管家”

华为云开发者联盟

大数据 数据湖 云原生 华为云 FusionInsight MRS

机器学习训练营第一次作业

学习

谁说 Java 不能用来跑 Serverless?

张晓辉

Java Serverless Knative Quarkus

Python异常的这些知识点你都get到了吗?

老猿Python

Python 编程语言 异常处理

curl使用

Hex

工具

BOE(京东方)成都数字医院开诊,投资60亿打造西南智慧医疗创新典范

爱极客侠

面向软件 IT 专业的高校大学生职业规划问卷调查

打工人!

IT 问卷调查 职业生涯规划

【Node专题】Buffer理解

南吕

后端 nodejs 4月日更

Java中&、|、&&、||详解

Sakura

4月日更

低功耗深度休眠后无法唤醒、烧录程序,怎么办?(华大半导体HC32L136)

不脱发的程序猿

嵌入式软件 单片机 4月日更 华大半导体 HC32L136

RocketMQ 在使用上的一些排坑和优化

AI乔治

Java 架构 分布式 RocketMQ 高并发

南京的春天

小天同学

随笔 4月日更 春天 南京 散文

CloudIDE:为开发者写代码开启“加速”模式

华为云开发者联盟

开发者 代码 华为云 CloudIDE HDC2021

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