写点什么

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

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

关注

评论

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

重磅更新!Sermant 1.2.0 release版本新特性速览

华为云开发者联盟

开源 后端 华为云 华为云开发者联盟

混沌工程稳态假说

腾讯云混沌演练平台

混沌工程 稳定性保障

混沌工程GameDay

腾讯云混沌演练平台

混沌工程 GameDay 稳定性建设 混沌演练

VMware Workstation 17安装教程之设置系统模式

小齐写代码

如何调用API获取你想要的数据

Noah

如何利用 NFTScan NFT API 在 Aptos 网络上进行 Web3 应用程序开发

区块链软件开发推广运营

交易所开发 dapp开发 区块链开发 链游开发 NFT开发

服务器大揭秘:美国服务器为何成为热门选项?

一只扑棱蛾子

美国服务器

大模型 | 今天聊聊大语言模型幻觉(AI Hallucinations)

澳鹏Appen

数据标注 大模型 生成式AI LLM 大模型幻觉

Denodo全球CEO兼创始人Angel Viña访华 共襄中国经济数字化转型新机遇

科技汇

低代码可视化平台 快速搭建油库2D组态管理平台

2D3D前端可视化开发

物联网 可视化 组态软件 组态工具 智慧油库

基于eBPF的云原生可观测实践

谐云

终身学习支持非结构化场景 | KubeEdge-Ianvs v0.2 发布

华为云原生团队

云计算 容器 云原生 边缘计算 kubeedge

堪比文件传输助手!解决文本、图片、视频、音乐跨设备同步难题!

彭宏豪95

软件推荐 文件传输 数据同步 在线白板 浏览器插件

购买小间距LED显示屏需要考虑8个方面

Dylan

领域 LED LED显示屏 实用指南

如何使用查看器筛选、搜索功能进行数据定位?

观测云

数据分析 数据可视化

低代码,程序员提高生产力的开发工具

互联网工科生

低代码开发 JNPF

PDF编辑器:Acrobat Pro DC 2023 「Mac」

彩云

PDF编辑 Acrobat Pro DC 2023

Java应用程序性能开发工具:JProfiler 14 「Mac」附 注册码

彩云

java开发工具 JProfiler 14

利用Docker容器化构建可移植的分布式应用程序

互联网工科生

Docker 容器化

知识图谱与大模型相结合的3种方法,1+1>2

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 大语言模型

荣耀推送服务 - 发送下行消息能力指导

荣耀开发者服务平台

基础服务 实时推送 API 接口 荣耀开发者服务平台 开放能力

容器安全和安全运行时的重要性

极客天地

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