串行程序
: 串行程序特指只能被順序執行
的指令列表併發程序
: 能夠被併發執行
的兩個及以上
的串行程序的綜合體並行程序
: 被設計成能夠在並行硬件
上執行的併發程序分佈式系統
等於 並行系統
等於 併發系統
進程
: 一個程序的執行稱爲一個進程。進程是操做系統進行資源分配的一個基本單位
由父進程使用系統函數fork,fork出一個子進程。子進程得到父進程的數據段,堆和棧的副本。
擴展:Linux寫時拷貝技術html
進程的標識 進程的ID(PID
) 當前進程的父進程ID(PPID
)
進程的狀態: 操做系統之進程的幾種狀態編程
進程空間:用戶空間
內核空間
多線程
系統調用
: 爲了使用戶進程可以使用操做系統更底層的功能,內核會暴露出一些接口供他們使用,這些接口是用戶進程使用內核功能的惟一手段
。系統調用時向內核空間發出一個明確的請求
內核態
和 用戶態
用戶態
: CPU只能對用戶空間進行訪問內核態
: 控制計算機的硬件資源併發
實現
: 當用戶進程發出一個系統調用時,內核
會把CPU從用戶態切換
到內核態,然後會讓CPU執行對應的內核函數編程語言
進程間的上下文切換
: 憑藉CPU的威力快速地在多個進程之間進行切換
IPC
管道
: 一種半雙工(單向)的通訊方式,只能用於父進程與子進程以及同祖先的子進程之間的通訊信號
: 用來通知接收進程某個事件已經發生套接字
: 可用於不一樣機器之間的進程間通訊 擴展 :RPC遠程過程調用 共享內存
: 最快的IPC
方式,多個進程共享一樣的資源。爲了作到這一點,須要內核提供鎖
和同步機制
競態
: 多個進程對一個資源進行訪問
原子操做
: 執行過程當中不能被中斷
的操做(全部的系統調用都屬於原子操做)
臨界區
: 只能被串行化
訪問或執行的某個資源或某段代碼稱爲臨界區
互斥
: 保證只有一個
進程或線程在臨界區以內的作法
線程
: 線程能夠視爲線程的控制流,一個進程至少會包括一個線程
線程標識
: 由操做系統內核分配和維護
線程控制的系統調用:分佈式
pthread_create
pthread_cancel
pthread_join
pthread_detach
線程實現模型函數
線程是由用戶的線程庫全權管理,全部的調度和管理都是用戶級程序的自主行爲。(現代操做系統都不適用這種模型來實現線程)性能
由內核複製管理,屬於內核的一部分。會給內核的調度器形成很是大的負擔。
缺點 : 資源消耗較大,調度速度較慢等。但與用戶級線程模型相比有較大優點。(不少現代操做系統都是由之內核級線程模型實現線程)spa
混合型線程模型的線程庫會經過操做系統內核建立多個內核級線程,而後,經過內核級線程對應用程序進行調度。大多數此類線程庫均可以將這些應用程序動態地與內核級程序關聯。由於混合型線程模型實現的複製性,它每每不會是操做系統內核的開發者所採用。可是,這種模型能夠很好地在編程語言層面上實現並充分發揮其應有的做用操作系統
擴展 : 線程的3種實現方式
關鍵點是解決共享數據的一致性
互斥量
條件變量
原子操做
不當的互斥量致使的死鎖問題
例如 : 兩個互斥量的臨界區重疊
解決方案
(A爲先鎖定X再鎖定Y,B爲先鎖定Y再鎖定X。改爲A先鎖定Y再鎖定X)
條件變量
: 條件變量是對應的共享數據的狀態改變時,通知其餘所以而被阻塞
的線程。條件變量老是
和互斥量組合使用
多線程做爲更加現代的併發編程方式在系統資源的利用和程序性能的提升方面都更加有優點。可是,在某些狀況下。好比對信號的處理
,同時運行多套不一樣的程序
以及包括多個須要超大內存支持
的任務等,傳統的多進程編程方式可能會更加適合。