写点什么

C#中安全并行机制的唯一性和引用不可变性研究

  • 2012-12-20
  • 本文字数:1141 字

    阅读完需:约 4 分钟

近来,微软、微软研究院和华盛顿大学的不少知名人士正在对 C#中的新变量类型进行研究。该变量类型引入了语言级别上的可读性和不可变引用(immutable references)的概念。这意味着每种引用有四种权限的限定符,这些限定符会修改变量和参数。

C#中的普通引用是“可写(writable)”权限。这表示引用所指向的对象可以用普通的方法和属性设置进行修改。

下一种限定符是“可读(readable)”权限。可读引用是对象的一种只读视图。在这种权限下你还是可以修改对象,只是不能用特殊的引用方式进行修改。

如果任何一种引用都无法修改某对象,那么这种引用就称作为“不可变(immutable)”。不可变引用也被称作只读引用,不可变引用所指向的所有对象都是不可变的。

最后一种权限限定符叫做“隔离(isolated)”,表示“对外部唯一对象簇的外部引用”。这是个相对复杂的概念。想象一下,在某个图表中你有一些可变对象,你能够通过简单或复杂方法引用,但是你不能在图表之外直接引用这些对象。除非这个对象是根聚集,这是一种例外。研究中的图 1 也许能更清楚地表示这种限定符:

很多研究集中探讨了对象如何在这四种限定符之间进行转换。这个概念在创建复杂、不可变的对象图表中至关重要。在传统的功能性编程语言当中,程序自下而上地创建不可变对象图表。由于对开发语言的依赖,这使得内部循环变得困难甚至不可行。这还可能造成性能下降,特别是当开发过程中的叶节点需要进行修改时。

而在新模式下,对象图表首先从可变对象中创建,正如传统的面向对象编程风格的图表。被标记成“隔离”的单个变量去引用根图表。之后你可以用函数将变量所对应的值从“隔离”T 转换成“不可变”T,以达到“恢复不可变性”的作用。(谨记,“隔离”和“不可变”是变量类型的限定符,而非它们所引用的对象类型。)

这样做的主要原因在于,这让我们可以使用更安全的并行机制。编译器能够通过权限的限定符来判断程序是否安全地访问对象,并且不会引入竞争条件。尽管这样做无法彻底地消除死锁,但至少能够减少死锁的频率。

这种设计还开启了优化编译器及执行环境的新途径。

比如对不可变数据,并发的垃圾回收可以使用更灵活的可读边界。编译器变得更支持 Code Motion 以及缓存,并支持通过 MSIL-to-native 传递将不可变数据保留为二进制方式。

Colin S. Gordon、Matthew J. Parkinson、Jared Parsons、Aleks Bromfield 和 Joe Duffy 共同撰写了《安全的并行机制的唯一性和不可变性引用》。

查看英文原文: Research into Uniqueness and Reference Immutability for Safe Parallelism in C#


感谢侯伯薇对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2012-12-20 04:322168

评论

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

CSS中的各种格式化上下文-FC(BFC、IFC、GFC、FFC)

肥晨

css3 三周年连更

相约用友BIP技术大会,用友iuap带您玩转数据智能

用友BIP

技术大会 用友iuap 数智化底座

对话 BitSail Contributor | 刘啸:参与开源,提升自我技术力

字节跳动数据平台

大数据 开源 数据集成 数据集成平台 数据引擎

升级企业数智化底座,加速推进国产替代

用友BIP

技术大会 用友BIP 升级企业数智化底座

防止网页防篡改,华为云网站安全方案省心又省力

爱尚科技

消息服务MNS之初见

六月的雨在InfoQ

Java 云产品 MNS 三周年连更 消息服务

这些央国企在数智化转型时为何选择用友?

用友BIP

技术大会 用友iuap 用友技术大会

macbook触摸板怎么按右键

互联网搬砖工作者

JavaScript 对象遍历为什么要使用 hasOwnProperty 检查属性

Lee Chen

JavaScript

摄影师必备图像编辑工具:Capture One Pro 23中文版

真大的脸盆

Mac Mac 软件 图像编辑 图像编辑工具 图像处理软件

JMeter 并发测试和持续性压测详解

Liam

测试 压测 并发测试 测试工具

火山引擎云原生数据仓库ByteHouse技术白皮书V1.0(中)

字节跳动数据平台

数据仓库 云原生 白皮书 云数据仓库 企业号 4 月 PK 榜

看数据如何驱动业务增长,来用友BIP技术大会探索数据智能的力量

用友BIP

数据智能 技术大会 用友iuap 用友技术大会

被称为大数据分析工具的瓴羊Quick BI,与传统数据分析工具有何不同?

流量猫猫头

使用CodeArts发布OBS,函数工作流刷新CDN缓存

华为云开发者联盟

云计算 后端 华为云 华为云开发者联盟 企业号 4 月 PK 榜

​华为云网站安全解决方案,多重防御保护企业数据安全

IT科技苏辞

九科信息RPA产品bit-Worker通过信创产品评估

九科Ninetech

Spring Security 的介绍和简单使用

会踢球的程序源

Java 后端 spring security Java进阶

保护企业网站安全,华为云网站安全解决方案有绝招

秃头也爱科技

众多企业的共同选择,华为云网站安全解决方案有哪些优势?

秃头也爱科技

瓴羊Quick BI与网易有数,看国产BI工具如何起势

夏日星河

观远数据 × Azure OpenAI,国内首个 BI Copilot 产品化应用

观远数据

ChatGPT

MatrixOne logservice 原理解析

MatrixOrigin

分布式数据库 MatrixOrigin MatrixOne Log Service

护航信息安全,就看华为云网站安全方案

爱尚科技

新一代异步IO框架 io_uring | 得物技术

得物技术

前端开发:未来依旧光明 | 社区征文

海拥(haiyong.site)

三周年征文

全面数字化时代,国有大型银行如何走好金融创新之路?

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 4 月 PK 榜

企业内部培训网站为例,探索云上成本优化

华为云开发者联盟

云计算 后端 华为云 华为云开发者联盟 企业号 4 月 PK 榜

从网站安全说起,华为云为何能成为政企的“好伙伴”

IT科技苏辞

C#中安全并行机制的唯一性和引用不可变性研究_C#_Jonathan Allen_InfoQ精选文章