摘自《C#并发编程经典实例》[美]Stephen Cleary

并发:同时做多件事情。终端用户利用并发功能,在输入数据库的同时相应用户输入。服务器应用并发,在处理第一个请求的同时响应第二个请求。

多线程:并发的一种形式,采用多个线程执行程序。是并发的一种形式但不是唯一形式。实际上,直接使用底层线程类型在现代程序中基本不起作用。比起老式的多线程机制,采用高级的抽象机制会让程序功能更加强大、效率更高。

书中所有多线程的方法都采用高级类型而不是Thread或BackGroundWorker。一旦你输入new Thread()那就说明项目中的代码太过时了。

但是不要以为多线程已经彻底被淘汰了!因为线程池要求多线程继续存在。线程池存放任务的队列,这个队列能够根据需要自行调整。相应的,线程池产生了另一个重要的并发形式:并行处理。

·并行处理

把正在执行的大量的任务分割成小块,分配给多个同时运行的线程。

为了让处理器的利用率最大化,并行处理(并行编程)采用多线程。当代多核cpu执行大量任务时,若只用一个核执行所有任务,而其他核保持空闲,这显然是不合理的。

并行处理把任务分割成小块并分配给多个线程,让他们在不同的核上独立运行。

并行处理是多线程的一种,而多线程是并发的一种。在现代程序中,还有一种非常重要但很多人还不熟悉的并发类型:异步编程。

 

·         异步编程

并发的一种形式,它采用future模式或回调(callback)机制,以避免产生不必要的线程。

一个future或promise类型代表一系列即将完成的操作。在.NET中,新版future类型有Task&Task<TResult>。在老式异步编程API中,采用回调或事件(event),而不是future。异步编程的核心理念是异步操作:启动了的操作将会在一段时间后完成。这个操作在执行时,不会阻塞原来的线程。启动了这个操作的线程,可以继续执行其他任务。当操作完成时,会通知它的future,或者调用回调函数,以便让程序知道操作已经结束。

异步编程是一种功能强大的并发形式,但直至不久之前,实现异步编程仍需要特别复杂的代码。vs2012支持async和await,这让异步编程几乎变得和同步(非并发)编程一样容易。

并发编程的另一种形式是响应式编程(reactive programming)。异步编程意味着程序启动一个操作,而该操作将会在一段时间后完成。响应式编程与异步编程非常类似,不过他是基于异步事件(asynchronous event)的,而不是异步操作(asynchronous operation)。异步事件可以没有一个实际的“开始”,可以在任何时间发生,并且可以发生多次。

·         响应式编程

一种声明式的编程模式,程序在该模式中对事件做出响应。

如果把一个程序看作一个大型的状态机,则该程序的行为便可视为对它一系列事件做出响应,即每换一个事件,它就更新一次自己的状态。这听起来很抽象和空洞,但实际上并非如此。利用现代的程序框架响应式编程已经在实际开发中广泛使用。响应式编程不一定是并发的,但它与并发编程联系紧密。

最新文章

  1. System系统类常用方法
  2. 逻辑回归(Logistic Regression)
  3. TCP连接状态与2MSL等待时间
  4. 【GPU编解码】GPU硬解码---DXVA
  5. 第四章 Js的面向对象的初窥视(天生的哈希表)
  6. mysql 常见的几个错误问题
  7. PHP中::、-&gt;、self、parent::、$this操作符的区别
  8. YII CJson类
  9. suse系统FTP问题
  10. Microsoft2013校园招聘笔试题及解答
  11. Configure Always On Availability Group for SQL Server on RHEL——Red Hat Enterprise Linux上配置SQL Server Always On Availability Group
  12. 中间件方法必须返回Response对象实例(tp5.1+小程序结合时候出的问题)
  13. numpy小结
  14. 使用TPC-DS工具生成数据
  15. MATLAB绘图功能(2) 二维底层绘图修饰
  16. 代码本色 用编程模拟自然系统 (Daniel Shiffman 著)
  17. tcpdump 命令
  18. 关于Unity中的碰撞检测和管理(2D)
  19. loadrunner测试c/s架构的应用系统
  20. 安装在Ubuntu上的Python虚拟环境

热门文章

  1. Inception Score
  2. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons):glyphicon glyphicon-barcode
  3. Python 删除文件与文件夹
  4. redis十-对快照模式分析
  5. hdu 1075 What Are You Talking About 火星文翻译成英文
  6. md5sum|zip|
  7. CMD手动打jar包
  8. ZOJ - 3635 Cinema in Akiba(树状数组+二分)
  9. 面试官,不要再问我“Java 垃圾收集器”了(转载)
  10. date linux系统校正时间