進程是程序的一次執行過程,是一個動態概念,是程序在執行過程當中分配和管理資源的基本單位,每個進程都有一個本身的地址空間,至少有 5 種基本狀態,它們是:初始態,執行態,等待狀態,就緒狀態,終止狀態。html
線程是CPU調度和分派的基本單位,它可與同屬一個進程的其餘的線程共享進程所擁有的所有資源。多線程
協程,是一種比線程更加輕量級的存在,協程不是被操做系統內核所管理,而徹底是由程序所控制(也就是在用戶態執行)。這樣帶來的好處就是性能獲得了很大的提高,不會像線程切換那樣消耗資源。協程在子程序內部是可中斷的,而後轉而執行別的子程序,在適當的時候再返回來接着執行。併發
併發:在操做系統中,是指一個時間段中有幾個程序都處於已啓動運行到運行完畢之間,且這幾個程序都是在同一個處理機上運行。其中兩種併發關係分別是同步和互斥異步
互斥:進程間相互排斥的使用臨界資源的現象,就叫互斥分佈式
同步:進程之間的關係不是相互排斥臨界資源的關係,而是相互依賴的關係。進一步的說明:就是前一個進程的輸出做爲後一個進程的輸入,當第一個進程沒有輸出時第二個進程必須等待。具備同步關係的一組併發進程相互發送的信息稱爲消息或事件。其中併發又有僞併發和真併發,僞併發是指單核處理器的併發,真併發是指多核處理器的併發。性能
並行:在單處理器中多道程序設計系統中,進程被交替執行,表現出一種併發的外部特種;在多處理器系統中,進程不只能夠交替執行,並且能夠重疊執行。在多處理器上的程序纔可實現並行處理。從而可知,並行是針對多處理器而言的。並行是同時發生的多個併發事件,具備併發的含義,但併發不必定並行,也亦是說併發事件之間不必定要同一時刻發生。操作系統
異步:異步和同步是相對的,同步就是順序執行,執行完一個再執行下一個,須要等待、協調運行。異步就是彼此獨立,在等待某事件的過程當中繼續作本身的事,不須要等待這一事件完成後再工做。線程就是實現異步的一個方式。異步是讓調用方法的主線程不須要同步等待另外一線程的完成,從而可讓主線程幹其它的事情。
異步和多線程並非一個同等關係,異步是最終目的,多線程只是咱們實現異步的一種手段。異步是當一個調用請求發送給被調用者,而調用者不用等待其結果的返回而能夠作其它的事情。實現異步能夠採用多線程技術或則交給另外的進程來處理。.net
(1)線程執行開銷小,但不利於資源管理和保護;進程則相反,進程可跨越機器遷移。線程
(2)多進程時每一個進程都有本身的內存空間,而多線程間共享內存空間;設計
(3)線程產生的速度快,線程間通訊快、切換快;
(4)線程的資源利用率比較好;
(5)線程使用公共變量或者資源時須要同步機制。
參考連接:
【1】https://www.jianshu.com/p/354066717f78
【2】http://www.javashuo.com/article/p-gssvmvcp-bx.html
【3】https://blog.csdn.net/qq_32621445/article/details/78635951
【4】http://blog.sina.com.cn/s/blog_bf63e2650102xcu6.html
【5】http://www.javashuo.com/article/p-kdjgsgvj-kd.html
【6】http://www.javashuo.com/article/p-mxvkvufb-dg.html