不知道是否是我本身自己就有那麼一絲絲的密集恐懼,把這麼一大堆看起來很類似很相關的概念放在一塊兒,看起來是有點麻,捋一捋感受舒服多了。算法
在進程的概念出現以前,進程有着這樣的稱謂。編程
爲了使多個程序可以併發(同一時刻只有一個在運行,但感受起來像多個同時運行;並行(同一時刻真的多個在運行,不是感受像多個))的執行,操做系統須要一個結構來抽象和表示這個程序的運行。數據結構
進程是資源分配的基本單位,進程的調度涉及到的內容比較多(存儲空間,CPU,I/O資源等,進程現場保護),調度開銷較大,在併發的切換過程效率較低。爲了更高效的進行調度,提出了比進程更輕量的獨立運行和調度的基本單位。併發
代碼易移植性一直是平臺間交互考慮的重點,在將引用程序從Unix移植到Windows的過程當中,會存在一些相似於線程棧管理的不一致、結構和異常處理等問題,增長移植難度和成本。spa
爲了幫助各公司更快、更正確地將他們的代碼移植到Windows,Microsoft 在操做系統中增長了纖程(Fiber)。纖程與纖程對比,有以下的特性:操作系統
把管程放最後還加了一道分割線緣由是管程跟上面的幾個概念不是同一類東東,雖然長得很像,就像Car和Bar同樣。線程
臨界資源的概念:設計
臨界資源的訪問須要同步操做,好比信號量就是一種方便有效的進程同步機制。但信號量的方式要求每一個訪問臨界資源的進程都具備wait和signal操做。這樣使大量的同步操做分散在各個進程中,不只給系統管理帶來了麻煩,並且會因同步操做的使用不當致使死鎖。管程就是爲了解決這樣的問題而產生的。協程
操做系統中管理的各類軟件和硬件資源,都可用數據結構抽象地描述其資源特性,即用少許信息和對該資源所執行的操做來表徵該資源,而忽略它們的內部結構和實現細節。利用共享數據結構抽象地表示系統中的共享資源。而把對該共享數據結構實施的操做定義爲一組過程,如資源的請求和釋放過程request和release。進程對共享資源的申請、釋放和其餘操做,都是經過這組過程對共享數據結構的操做來實現的,這組過程還能夠根據資源的狀況接受或阻塞進程的訪問,確保每次僅有一個進程使用該共享資源,這樣就能夠統一管理對共享資源的全部訪問,實現臨界資源互斥訪問。進程
管程就是表明共享資源的數據結構以及由對該共享數據結構實施操做的一組過程所組成的資源管理程序共同構成的一個操做系統的資源管理模塊。管程被請求和釋放臨界資源的進程所調用。
管程定義了一個數據結構和能爲併發進程所執行(在該數據結構上)的一組操做,這組操做能同步進程和改變管程中的數據。
這個也是一個跟上面的概念不是一類事的概念,超線程是Intel CPU設計上的一種技術。
一個CPU物理核在同一時間只能執行一個線程,而線程的切換會消耗掉上萬的始終週期,效率還不夠高。超線程就是在實現同一個CPU物理核在同一時間能幾乎執行兩個線程的技術。這就是咱們在Intel CPU的機子上的任務管理器中常常看到double的CPU物理核心的原因。