题记:就语言和运行时层面,C#做并发编程一点都不弱,缺的是生态和社区。 硅谷才女朱赟(我的家门)昨天发了一篇文章《为什么用Java——关于并发编程》,让大家学习了Java中如何进行并发编程的一些基本知识。作为一个将近15年的.NET程序员,我觉得有必要给大家补充介绍一下C#进行并发编程的知识(当然不会太深入讲解)。这篇文章无意进行技术比较,毕竟技术只是工具(大同小异,各有千秋),主要还是看用工具的人。 并发(英文Concurrency),其实是一个很泛的概念,字面意思就是“同时做多件事”,不过方式有所不同。在.NET的世界里面,并发一般涉及如下几个方面: 多线程编程(已过时,不介绍) 异步编程 并行编程 响应式编程 数据流编程 为了支持以上编程,.NET提供了很多基础功能,比如:委托,匿名函数,Lambda表达式,线程池,Task模型,支持并发的集合(线程安全集合和不可变集合),调度器,同步功能。在这里,就不对这些内容进行介绍了,大家可以自行搜索学习。另外,对于Actor模型,.NET中也有支持,但我不认为它属于语言/运行时层面的并发,它更像架构层面的并发,我最后会简单介绍。 1,异步编程异步编程就是使用future模式(又称promise)或者回调机制来实现(Non-blockingonwaiting)。 如果使用回调或事件来实现(容易callbackhell),不仅编写这样的代码不直观,很快就容易把代码搞得一团糟。不过在.NET4.5(C#5)中引入的async/await关键字(在.NET4.0中通过添加Microsoft.Bcl.Async包也可以使用),让编写异步代码变得容易和优雅。通过使用async/await关键字,可以像写同步代码那样编写异步代码,所有的回调和事件处理都交给编译器和运行时帮你处理了。 使用异步编程有两个好处:不阻塞主线程(比如UI线程),提高服务端应用的吞吐量。所以微软推荐ASP.NET中默认使用异步来处理请求。 要详细了解异步编程,可以参考官方文档:北京治疗白癜风的最好的医院北京哪治疗白癜风好
|