题目这些概念错综复杂,相互联系,常常会让初用到或者第一次接触到这些概念的有一种“乱花渐欲迷人眼”的感受,今天就来大概捋一下它们之间的关系html
先来单独分析各自的概念:git
并发与并行概念的引入应该是为了解决多任务问题,从任务执行角度来说,并发是逻辑层面上的多任务同时执行,而并行是物理层面上的多任务同时执行,因此从这个角度来说,咱们不难推断出,一个结论:并行属于并发,而并发却不是并行。github
并发是一个宏观表象,其实际通常是在单个CPU时间片内,完成了多个任务,在微观层面上讲其实并发也是顺序执行的。多线程
并行在宏观和微观上都是多个任务同时处理,并行在单个CPU的系统上是不可能实现的并发
用实际操做的经验来讲,并发通常是指的多线程系统,并行是指的多进程系统,固然根据上边的概念,并行也是实现并发的一种方式异步
同步的任务执行是顺序执行的,异步则能够在子调用完成以前退出,是非顺序执行的。从这个概念上讲对于一个具备多个子调用的过程而言,异步的效率并不必定比同步高,甚至有时候还会差一些,即异步不必定会比同步具备优点。只有在具备阻塞的子调用的过程当中异步模式的效率才会优于同步模式async
在不考虑任务CPU时间片耗尽的状况下ide
阻塞,在任务的执行过程当中,任务会在遇到阻塞后主动让出CPU占用,进入等待状态;tornado
非阻塞,在任务执行的过程当中,任务不会主动让出CPUui
参考:
https://gist.github.com/thinkingkr/90baeac55931ac3972f823a38d651ca4
http://tornadocn.readthedocs.io/zh/latest/guide/async.html