误解一:并发就是多线程
实际上多线程只是并发编程的一种形式,在C#中还有很多更实用、更方便的并发编程技术,包括异步编程、并行编程、TPL 数据流、响应式编程等。
误解二:只有大型服务器程序才需要考虑并发
服务器端的大型程序要响应大量客户端的数据请求,当然要充分考虑并发。但是桌面程序和手机、平板等移动端应用同样需要考虑并发编程,因为它们是直接面向最终用户的,而现在用户对使用体验的要求越来越高。程序必须能随时响应用户的操作,尤其是在后台处理时(读写数据、与服务器通信等),这正是并发编程的目的之一。
误解三:并发编程很复杂,必须掌握很多底层技术
C# 和 .NET 提供了很多程序库,并发编程已经变得简单多了。尤其是 .NET 4.5 推出了全新的 async 和 await 关键字,使并发编程的代码减少到了最低限度。
上述摘自译者序。
本书基本信息:
著 [美] Stephen Cleary
译 相银初
市面上关于并发的技术书,大多是Java相关。有个前辈推荐了这本书,耐心看了一遍,真心觉得真是不错,决定精读并写一个系列笔记博客。前辈推荐的时候是去年年初,到现在决定写博客,已经一年半过去,羞愧羞愧,执行力不高,但总归是开始着手做了,希望能坚持下来。
提到并发就不得不提并行,即并行(Parallel)和并发(Concurrent)的区别。
知乎的一个回答我觉得拿来解释最合适不过,这个解释的角度是从CPU为出发点。
并发与并行的区别? - 刘志军的回答 - 知乎
并发是两个队列交替使用一台咖啡机,并行是两个队列同时使用两台咖啡机
咖啡机指CPU,排队的队伍可以是线程(thread)也可以是进程(process)。
进程(process)和线程(thread)的概念描述打算独立成文,下次就写。
在对误解一的解释中,可以看出作者是认为并行编程也属于并发编程的。是的,并行应该是属于并发的一种,对并发的概念来说,并行可以认为是并发的一种特殊情况。
在后续的笔记中我会将书中的伪代码实例尝试写成可运行的代码,用于自己强化理解和记忆,这也是精读的意义所在。写的代码有所不足之处,望不吝指教。