并发编程
一开始看到“并发”这个词,我会想到多线程,当上网搜索“并发编程”时,百度百科给我的答案是指在一台处理器上“同时”处理多个任务。并发是在同一实体上的多个事件。多个事件在同一时间间隔发生。 想要系统的了解关于并发、异步,然而找不到详细资料,然后向前辈请教,他给我一本书参考《C#并发编程经典实例》。这本书解开了我对并发编程、并行编程、多线程、异步的误解。
误解一: 并发就是多线程
我:在没搞懂并发时自认为是一回事。
作者强调:多线程只是并发编程的一种形式,在C#中海油很多并发编程技术,包括异步编程、并行编程、TPL数据流、响应式编程等。
误解二:只有大型服务器程序才需要考虑并发
我:并发不就应该处理大数据,多任务时采用的么...
作者强调:不仅服务器端的大型程序,而且桌面程序、手机、平板等移动端都需要考虑并发,因为它们是直接面向用户的,而现在用户对使用体验的要求越来越高。程序必须能随时响应用户的操作,尤其是在后台处理时(读写数据,与服务器通信等),这正是并发编程的目的之一。
误解三:并发编程很复杂,必须掌握很多底层技术
我:我一直是这么认为的,只有掌握底层技术的前提下,才能使用好并发。
作者强调:C#和.NET提供了很多程序库,并发编程已经变得简单多了。尤其是.NET4.5退出了全新的async和await关键字,使并发编程的代码减少到了最低限度。并行处理和异步开发已经不再是高手们的专利,只要使用本书的方法,每个开发人员都能写出交互性良好、高效、可靠的并发程序。
1.1 并发编程简介
- 并发
同时做多件事情。 这表明了并发的作用。只要你希望程序同时做多件事情,就需要并发。(例: 服务器应用利用并发,在处理第一个请求的同时响应第二个请求。)
- 多线程
并发的一种形式,它采用多个线程来执行程序。从字面上看,多线程就是使用多个线程。多线程是并发的一种形式,但不是唯一的形式。
- 并行处理(并行编程)
把正在执行的大量的任务分割成小块,分配给多个同时运行的线程。
为了让处理器的利用效率最大化,并行处理采用多线程。
并行处理是多线程的一种,而多线程是并发的一种。
- 异步编程
并发的一种形式,它采用future模式或回调机制,以避免产生不必要的线程。一个future类型代表一些即将完成的操作。在.NET中,新版future类型有Task和Task<TResult>。
异步编程的核心理念是异步操作:启动了的操作将会在一段时间后完成。这个操作正在执行时,不会阻塞原来的线程。VS2012支持async和await。
- 响应式编程
一种声明式的编程模式,程序在该模式中对事件做出响应。
假设把一个程序看做一个大型的状态机,则该程序的行为便可视为它对一系列事件作出响应,即每换一个事件,它就更新一次自己的状态。响应式编程不一定是并发的,但他与并发编程联系紧密。
通常,一个并发程序要使用多种技术。大多数至少使用了多线程(通过线程池)和异步编程。以上均参考《C#并发线程经典实例》。
1.2 异步编程
请参考http://www.cnblogs.com/tdws/p/5617242.html,博客园 蜗牛 2016年6月26日。