今天不讲细节,重在把概念理清,要不然看别人文章总是会混淆。
一,并发的概念
能够同时做多件事情。
二,并发的实现形式:
1.多线程
采用多个线程来执行程序 可以把大量的任务分割成小块,分配给多个同时运行的线程。
线程是一个独立的运行单元,每个进程内部有多个线程,每个线程可以各自同时执行指令。每个线程有自己独立的栈,但是与进程内的其他线程共享内存。对某些程序来说,其中有一个线程是特殊的,例如用户界面程序有一个UI线程,控制台程序有一个main线程。
.NET程序会维护一个线程池,这个线程池维护一定数量的工作线程,他们像一群待命的工人,随时等待任务分配并随时去执行。 线程池可以随时监测线程的数量,可以访问并配置线程池相关的参数,但是建议采用默认设置。
多线程的一种实现形式:并行处理
1.1 并行处理
如果程序中有大量的计算任务,并且这些任务能分割成几个互相独立的任务块,那就应该使用并行编程。并行编程可临时提高CPU利用率,以提高吞吐量,若客户端系统中的CPU经常处于空闲状态,这个方法就非常有用,但通常并不适合服务器系统。 并行处理又分为两种形式:数据并行和任务并行。
1.1.1 数据并行
数据并行的一个简单例子,你要在一大堆试卷需要批改,这个例子中每张试卷的批改之间不会相互影响,那么你可以把试卷分配给其他人一起。但是如果任务之间是要共享并操作数据则不要使用这种方式
1.1.2 任务并行
任务并行重点关注任务 任务并行也强调任务块的独立性。委托(delegate)的独立性越强,程序的执行效率就越高。在编写任务并行程序时,要格外留意下闭包(closure)捕获的变量。记住闭包捕获的是引用(不是值),因此可以在结束时以不明显地方式地分享这些变量。
使用形式,例如Task
2.异步编程
它采用future模式或回调(callback)机制,以避免产生不必要的线程。
2.1 Future模式
2.2 Callback模式
2.3 新语法糖async和await简化异步编程
3.响应式编程
一种声明式的编程模式,程序在该模式中对事件做出响应。
响应式编程与异步编程非常类似,不过它是基于异步事件(asynchronous event)的,而不是异步操作(asynchronous operation)。异步事件可以没有一个实际的“开始”,可以在任何时间发生,并且可以发生多次,例如用户输入。
|