題目這些概念錯綜複雜,相互聯繫,常常會讓初用到或者第一次接觸到這些概念的有一種「亂花漸欲迷人眼」的感受,今天就來大概捋一下它們之間的關係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