【ArchSummit】如何通过AIOps推动可量化的业务价值增长和效率提升?>>> 了解详情
写点什么

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

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

关注

评论

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

方言语音识别技术:赋予方言更大的声音

来自四九城儿

微信广告投放代理合作 微信朋友圈广告代理加盟 终身售后

互联网广告践行者

创业 个人创业 微信朋友圈广告代理 微信广告

数据湖系列之三 | 打造高性能云原生数据湖,层级 namespace 对象存储加速大数据计算

Baidu AICLOUD

数据湖 对象存储 层级namespace

亚马逊云科技中国峰会探访笔记 | 周边收集达人

IT蜗壳-Tango

PoseiSwap IDO、IEO 结束,即将登录 BNB Chain

股市老人

3Ds MAX 2024发布!新功能盘点!

Finovy Cloud

强化学习从基础到进阶-常见问题和面试必知必答[8]:近端策略优化(proximal policy optimization,PPO)算法

汀丶人工智能

人工智能 深度学习 强化学习 6 月 优质更文活动 ppo算法

2023-06-28:你想要用小写字母组成一个目标字符串 target。 开始的时候,序列由 target.length 个 ‘?‘ 记号组成 而你有一个小写字母印章 stamp。 在每个回合,你可

福大大架构师每日一题

Go rust 算法、 福大大架构师每日一题

万字长文讲透 RocketMQ 4.X 消费逻辑

EquatorCoco

Rocket

如何使用CSS Grid 居中 div

南城FE

CSS 前端 布局

Health Kit 新版本功能解析,给你丰富运动体验!

HMS Core

HMS Core

Tongsuo 8.4.0-pre1 发布啦!

铜锁开源密码库

算法 信息安全 密码学 数据安全 版本发布

人脸识别技术的优缺点及实际应用

来自四九城儿

基于STM32设计的炉温温度检测仪

DS小龙哥

6 月 优质更文活动

PoseiSwap IDO、IEO 结束,即将登录 BNB Chain

BlockChain先知

PoseiSwap IDO、IEO 结束,即将登录 BNB Chain

EOSdreamer111

【开发者福利】教你3步薅到免费GPU算力!

阿里云大数据AI技术

人工智能

“多云“和”私有化“,企业级刚需推动 DataBricks 和 MosaicML的13亿美金 AI 交易

B Impact

共识算法揭秘:理解分布式系统的关键

Steven

一文详解:大数据分析工具有哪些?

夜雨微澜

语音合成技术与语音合成数据:赋予声音新的可能性

来自四九城儿

为什么不应该给用户提示错误码

光毅

前端‘’

微服务架构:探索微服务架构的核心概念

2756

#微服务

广州|阿里云 Serverless 技术实战营邀你来玩!

Serverless Devs

云计算 Serverless 托管服务

C++实现工资管理中的随机教师信息生成功能

智趣匠

亚马逊实践 | 构建可持续发展的架构模型

亚马逊云科技 (Amazon Web Services)

DevOps

清微智能TX5368A与飞桨完成Ⅱ级兼容性测试,助力全行业智能化升级

飞桨PaddlePaddle

人工智能 百度 paddle

介绍 9 个研发质量度量指标

LigaAI

质量指标 研发效能度量 MTTR 研发效能管理 企业号 6 月 PK 榜

编写轻量级 CSS 框架,看这篇就够了

伤感汤姆布利柏

CSS

PoseiSwap IDO、IEO 结束,即将登录 BNB Chain

大瞿科技

代码随想录训练营Day01- 数组(上)

jjn0703

算法 LeetCode 力扣

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