写点什么

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:322231

评论

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

DevSecOps 安全即代码基础指南

SEAL安全

DevOps DevSecOps 云安全 DevSecOps和敏捷

MobTech 短信验证使用说明与应用创建

MobTech袤博科技

App sdk 短信验证

接口测试实战 | Android 高版本无法抓取 HTTPS,怎么办?

霍格沃兹测试开发学社

恭喜天翼云“翼起飞”战队在CCF国际AIOps挑战赛中夺得亚军!

天翼云开发者社区

加快云网融合发展,打通算力传输大动脉!

天翼云开发者社区

呆猫云工作站助力Omniverse云上部署试水元宇宙

神奇视野

GaussDB(for Cassandra)新特性发布:Lucene二级索引,让复杂查询更智能

科技怪咖

测试面试 | Python 算法与数据结构面试题系列二(附答案)

霍格沃兹测试开发学社

DeFi+NFT质押置换挖矿系统开发技术方案详情

开发微hkkf5566

技术分享 | 一文带你了解测试流程的体系

霍格沃兹测试开发学社

【CSPO认证】国际Scrum联盟认证导师CST授课 | 全国招生

ShineScrum

CSPO认证

测试面试 | 某 BAT 大厂测试开发面试真题与重点解析

霍格沃兹测试开发学社

安全可信 | 首批!天翼云通过可信云安全云工作负载保护平台评估

天翼云开发者社区

代码层走进“百万级”分布式ID设计

得物技术

数据库 缓存 分布式 性能优化 企业号九月金秋榜

OpenHarmony技术挑战课题征集

OpenHarmony开发者

OpenHarmony

技术分享 | 做为测试,那些必须掌握的测试技术体系

霍格沃兹测试开发学社

技术分享 | 软件测试入门必会-流程管理平台

霍格沃兹测试开发学社

华为伙伴暨开发者大会之GaussDB高校行,产教融合持续赋能人才培养

科技怪咖

测试开发基础 | Python 算法与数据结构面试题系列一(附答案)

霍格沃兹测试开发学社

测试管理和领导力秘诀,12+ BAT 大厂测试经理的干货经验汇总

霍格沃兹测试开发学社

软件测试 | 测试开发 | 接口自动化测试之JSON Schema模式改如何使用?

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

JSON Schema

拔掉电源会怎样?GaussDB(for Redis)双活让你有备无患

科技怪咖

“云”上交通,“翼”路畅行

天翼云开发者社区

软件测试 | 测试开发 | 接口自动化测试中如何对xml 格式做断言验证?

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

接口自动化测试

用GaussDB(for Redis)存画像,推荐业务轻松降本60%

科技怪咖

快应用与原生APP相比,都有哪些优势?

Speedoooo

小程序 移动开发 轻应用 快应用 移动框架

驭数有道,天翼云TeleDB系列产品全新升级

天翼云开发者社区

【CSM认证】9月17-18&24-25日在线周末班 | 全国招生

ShineScrum

CSM

测试面试 | 一道大厂算法面试真题,你能答上来吗?(附答案)

霍格沃兹测试开发学社

《低代码发展白皮书(2022年)》&《2022低代码·无代码应用案例汇编》,发布了

华为云开发者联盟

云计算 后端 低代码 开发

教育信息化迈入2.0时代,呆猫云工作站破除技术壁垒

神奇视野

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