写点什么

微软缘何认为 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:312387
用户头像

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

关注

评论

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

生产环境TiDB集群混合部署实践

TiDB 社区干货传送门

安装 & 部署 数据库架构设计

tidb server的oom问题优化探索

TiDB 社区干货传送门

性能调优 故障排查/诊断

TiDB集群恢复之TiKV集群不可用

TiDB 社区干货传送门

实践案例 集群管理 管理与运维 故障排查/诊断

新经济 DTC 转型,一个简单而强大的数据平台至关重要

TiDB 社区干货传送门

TiHC Alpha 1.0 版本试用简介,欢迎来玩!

TiDB 社区干货传送门

监控 管理与运维

TiDB的HATP对我们来说意味着什么?

TiDB 社区干货传送门

数据库前沿趋势

Data Migration高可用演练

TiDB 社区干货传送门

迁移 实践案例 集群管理

DM 是如何处理 DML 的

TiDB 社区干货传送门

迁移

干货 | 分布式数据库TiDB在携程的实践

TiDB 社区干货传送门

Data Migration功能测试

TiDB 社区干货传送门

迁移 版本测评

将 AWS S3 数据迁移至 TiDB Cloud 集群

TiDB 社区干货传送门

Flink CDC 2.2 正式发布,新增 TiDB 数据源,新增 TiDB CDC 连接器

TiDB 社区干货传送门

新版本/特性发布 应用适配

Facebook 开源 Golang 实体框架 Ent 现已支持 TiDB

TiDB 社区干货传送门

应用适配 数据库连接

关于 TiDB 37 个知识点

TiDB 社区干货传送门

从2018到2022: 一个大数据工程师眼中的TiDB

TiDB 社区干货传送门

社区活动

TiUP:TiDBAer 必备利器

TiDB 社区干货传送门

管理与运维 安装 & 部署

网易这么牛的迁移方案你学会了吗?【DDB迁移TiDB方案设计】

TiDB 社区干货传送门

TiDB DM使用实践

TiDB 社区干货传送门

迁移 实践案例 管理与运维 安装 & 部署

tpcds performance compare between tidb and impala

TiDB 社区干货传送门

性能测评

TiDB 在携程 | 实时标签处理平台优化实践

TiDB 社区干货传送门

统计信息十问: 你不了解的那些事儿

TiDB 社区干货传送门

实践案例

tidb server的oom问题优化探索

TiDB 社区干货传送门

性能调优 故障排查/诊断

TiDB-最小实践 Cluster111

TiDB 社区干货传送门

实践案例

TiDB Lightning使用实践

TiDB 社区干货传送门

管理与运维 安装 & 部署 备份 & 恢复

Data Migration运维常见问题

TiDB 社区干货传送门

迁移

PD节点恢复之一个也不剩

TiDB 社区干货传送门

集群管理 故障排查/诊断 备份 & 恢复 扩/缩容

TiDB 社区技术月刊来了!故障解读,诊断及最佳实践,发版计划...你想知道的都在这里~

TiDB 社区干货传送门

性能调优 版本升级 版本测评 故障排查/诊断

TiDB Binlog使用实践

TiDB 社区干货传送门

实践案例 安装 & 部署 备份 & 恢复

TiDB TiCDC使用实践

TiDB 社区干货传送门

迁移 管理与运维 安装 & 部署

在线校验两个tidb系统的数据一致性

TiDB 社区干货传送门

迁移 版本升级 管理与运维

TiDB 中的高可用实践

TiDB 社区干货传送门

实践案例 管理与运维 安装 & 部署

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