写点什么

微软缘何认为 VB 与 C#需要异步语法

  • 2011-01-05
  • 本文字数:1432 字

    阅读完需:约 5 分钟

在过去几年间,多线程编程已经成为了一个热门话题。虽然我们长久以来一直都希望能有高速响应的用户界面,但实现这个愿望的工具却迟迟不见踪迹。对于大多数框架(包括.NET 程序员所使用的那些框架)来说,对用户界面的更新仍然局限于单独一个线程,同时,硬件制造商已经转向了多核来代替更快的 CPU。

C#与 VB 一开始提供了非常简单的并发支持,这是通过对监视器与委托使用 lock/SyncLock 关键字来实现的,异步程序库通过这两个关键字实现异步编程。在随后的几个版本中,我们并没有看到这两种语言在异步领域有任何进展,微软的精力都放在其他领域上了。随着.NET 4.0 的到来,情况有了很大的变化。.NET 4.0 引入了 3 个新的程序库:Task Parallel Library(TPL)、Parallel LINQ 以及 Coordination Data Structures(CDS)。这些程序库构建在增强的语法之上,如 lambda、closure 以及 LINQ,极大简化了多线程开发工作。但这些库也不是十全十美的。Parallel LINQ 看起来没什么问题,而对 TPL 的异步调用依旧充满了坏味道,有时还会出错。

如今的异步模式的一个大问题在于他们组合的不好。每个异步操作都需要通过回调链接到下一个。但回调是无法组合的,每一步都是独立的函数,无法划分到常见的编码结构中,如循环、using 或是 try——catch 块。

结果,大多数开发者实际上并没有使用异步模式。他们转向了并发的多线程,依赖于后台线程和手工同步。但这种方式也存在着问题。由于将线程浪费在了阻塞的 I/O 上,因此你失去了操作系统所提供的性能与可伸缩性的优势,比如说 I/O Completion Ports ,更不必说调度大量线程给内存带来的压力了。此外,你还可以使用单独一个线程和循环,这意味着每次 I/O 操作都得等到之前的操作完成后才能开始。

也就是说,我们按照这种方式编写代码已经有很长一段时间了,在大多数情况下都没什么问题。通常,计算机都有足够的速度和内存来处理对线程的草率使用,这使得将数据编排到 UI 线程变得不那么困难。那到底有什么变化呢?

有三件事:

首先是基础项目。 Async CTP 并非凭空出现的,它构建在之前的大量研究与产品项目基础之上。这包括了异步语言 Axum Task Parallel Library(TPL) Reactive Extensions(Rx)以及 F#的异步工作流。当这些工作全部完成后,VB/C#中的异步语法将成为下一步工作。

其次是参与的人。与很多研究项目会雇佣毕业生不同, Somasegar 打造了一个由 5 个天才项目经理所构成的团队,他们负责构建语法,以此证明异步编程可以像同步编程一样简单。这些开发者是 Avner Aharoni、 Mads Torgersen Stephen Toub 、Alex Turner 以及 Lucian Wischik ,他们都是.NET 领域的名家。没有他们的协作与奉献,CTP 是不可能出现的。

最后是 Silverlight。除了是 Flash 的替代者以外,Silverlight 还是微软移动战略中的重要棋子。除非开发游戏,否则不使用 Silverlight 是没法在 Windows Phone 7 上编写应用的。Sivlerlight 并不支持异步的 I/O 操作。曾尝试将 WPF 代码移植到 Silverlight 上的开发者知道,Sivlerlight 是不支持异步 I/O 操作的。你别无选择,只能使用异步模式。Lucian 在其“ Async CTP 简介”一文中阐释了这么做是多么的复杂。

当然了,这可能意味着 C#与 VB 应该支持异步语法。如果这在 C# 5/VB 11 中真的发生了,那么一旦发现语义不正确就没机会再移除掉了。这需要以牺牲其他特性作为代价,从“编译器即服务(compiler-as-a-service)”到各种细小的特性。

查看英文原文: Why Microsoft Believes that VB and C# Need an Asynchronous Syntax

2011-01-05 09:312328
用户头像

发布了 88 篇内容, 共 262.3 次阅读, 收获喜欢 8 次。

关注

评论

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

校源行丨开放原子开源基金会赴哈尔滨工程大学走访交流

开放原子开源基金会

程序员常逛的17 个杀手级网站

专注前端开发

前端 大前端 网站

业务需要咨询?开发遇到bug想反馈?开发者在线提单功能上线!

荣耀开发者服务平台

开发者 在线客服 工单 技术支持

生成式AI助力文学艺术创作

百度开发者中心

人工智能 艺术 文心一言

生成式AI领先,实现客服机器人真智能

百度开发者中心

人工智能 机器人 生成式AI 文心一言

宁高宁:数智企业,一流企业

用友BIP

2023全球商业创新大会

软硬件双向驱动 英特尔加速AI on PC落地

E科讯

用友Fast by BIP领先实践全景图公布!

用友BIP

Fast by BIP 2023全球商业创新大会

Microsoft Outlook 2021 for mac v16.76.2中文版

mac

苹果mac Windows软件 Outlook2021

探索MySQL到SelectDB的实时数据同步技术

NineData

数据同步 SelectDB NineData 同步工具 数据延迟

【华为云828企业节上福利】软件开发工具升级版免费套餐重磅上线

华为云PaaS服务小智

软件开发 华为云 CodeArts

校源行丨开放原子开源基金会赴吉林大学走访交流

开放原子开源基金会

众智引领未来:2023中国高校计算机大赛——大数据挑战赛冠军揭晓

云智慧AIOps社区

人工智能 算法 日志分析 计算机 模型

2023开源和信息消费大赛新闻发布会在京召开

开放原子开源基金会

iOS上架审核宝典:注意事项与实用工具分享

雪奈椰子

ios打包 IPA上传

C和C ++ IDE代码编辑器CLion 2023 激活码最新v2023.2

mac大玩家j

代码编辑器 Mac软件 代码编辑 编辑代码

何积丰:数智经济拥抱AI大模型

用友BIP

2023全球商业创新大会

GaussDB技术解读:应用无损透明(ALT)

华为云开发者联盟

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

微软缘何认为VB与C#需要异步语法_.NET_Jonathan Allen_InfoQ精选文章