写点什么

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

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

关注

评论

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

【每日学点HarmonyOS Next知识】类型判断、刘海高度、隐私弹窗、滑动下一页效果、清楚缓存

轻口味

HarmonyOS HarmonyOS NEXT

【每日学点HarmonyOS Next知识】页面引用问题、Json三方库、路由表使用、下拉刷新问题、视频播放错误

轻口味

HarmonyOS HarmonyOS NEXT

【每日学点HarmonyOS Next知识】上下拉动作、图片预览、组件边距、this获取、svg旋转

轻口味

HarmonyOS HarmonyOS NEXT

【每日学点HarmonyOS Next知识】抽屉效果、树状组件、离屏渲染、上下文获取、Tab声明周期

轻口味

HarmonyOS HarmonyOS NEXT

SvelteKit 最新中文文档教程(3)—— 数据加载

冴羽

JavaScript 前端开发 前端框架 Svelte SvelteKit

【每日学点HarmonyOS Next知识】路由返回、滚动到中间、worker取消任务、文本选择多级联动

轻口味

HarmonyOS HarmonyOS NEXT

【每日学点HarmonyOS Next知识】tab拦截、组件方法做参数、自定义组件链式调用、多次观察者监听、横竖屏切换

轻口味

HarmonyOS HarmonyOS NEXT

新手学吉他如何掌握音阶?有哪些软件可以帮助我们练习音阶?

阿拉灯神丁

吉他学习 吉他谱 Guitar Pro8 音乐管理和分析软件

音乐NFT系统的网络安全

北京木奇移动技术有限公司

区块链技术 软件外包公司 音乐NFT

记录一下 简单udp和sni 代理 done

八苦-瞿昙

C# Proxy

【每日学点HarmonyOS Next知识】点赞动画实现、Grid当前显示条目、刷新组件、代码规范、状态变量

轻口味

HarmonyOS HarmonyOS NEXT

【每日学点HarmonyOS Next知识】路由栈问题、图片圆角、颜色资源转十六进制字符串、数据集变化崩溃、组件声明周期

轻口味

HarmonyOS HarmonyOS NEXT

【每日学点HarmonyOS Next知识】防截屏、加载不同View、函数传参、加载中效果、沉浸式底部状态栏

轻口味

HarmonyOS HarmonyOS NEXT

友商科技-流体仿真分析咨询服务为企业排忧解难

极客天地

【第 8 期】搜索客 Meetup - Elasticsearch 的一些“双刃剑”特性

极限实验室

Meetup Elastic Search 搜索客社区

【每日学点HarmonyOS Next知识】自定义对象传参、页面生命周期、自定义弹窗、路由打开对话框,网络图片

轻口味

HarmonyOS HarmonyOS NEXT

【每日学点HarmonyOS Next知识】防截屏、作用域问题、观察器问题、对话框关闭、判断对象包含某个字段

轻口味

HarmonyOS HarmonyOS NEXT

【每日学点HarmonyOS Next知识】嵌套组件、装饰器报错、迭代列表刷新、单位换算、tabs组件生命周期

轻口味

HarmonyOS HarmonyOS NEXT

【每日学点HarmonyOS Next知识】字符串、图片生成二维码,文本行数获取及输入框退出编辑状态方法汇总

轻口味

HarmonyOS HarmonyOS NEXT

PIRF VIP 427:Sales – Unshakable Confidence in Value

Echo!!!

English

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