進程:程序員
百度百科的定義: 進程(Process)是計算機中的程序關於某數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位,是操做系統結構的基礎。在早期面向進程設計的計算機結構中,進程是程序的基本執行實體;在當代面向線程設計的計算機結構中,進程是線程的容器。程序是指令、數據及其組織形式的描述,進程是程序的實體。編程
我的理解: 進程是可併發程序執行的時候的一個實例。從內核的觀點看,進程的目的就是分配系統資源(CPU時間,內存等)和調度的基本單位安全
線程:數據結構
百度百科的定義: 線程(thread)是操做系統可以進行運算調度的最小單位。它被包含在進程之中,是進程中的實際運做單位。一條線程指的是進程中一個單一順序的控制流,一個進程中能夠併發多個線程,每條線程並行執行不一樣的任務。多線程
我的理解: 線程是進程中的一個實體,是系統分配處理器時間資源的基本單元,是程序執行的最小單位。併發
進程VS線程:spa
操做系統實際運行的是線程,進程只是一個容器。操作系統
線程是操做系統進行運行調度的最小單位。線程
包含在進程之中,是進程中實際運行工做的單位。設計
一個進程能夠併發多個線程,每一個線程執行不一樣任務。
|
進程 |
線程 |
資源 |
資源分配的基本單位 |
不擁有資源 |
調度 |
獨立調度的基本單位 |
獨立調度的最小單位 |
系統開銷 |
進程系統開銷大 |
線程系統開銷小 |
通訊 |
進程IPC |
讀寫贊成進程數據通訊 |
注:是指在不一樣進程之間傳播或交換信息。是一組編程接口,讓程序員可以協調不一樣的進程,使之能在一個操做系統裏同時運行,並相互傳遞、交換信息。
IPC的方式一般有管道(PIPE)(包括無名管道和命名管道)、消息隊列、信號量、共享內存、套接字(Socket)、Streams、旗語等。其中 Socket和Streams支持不一樣主機上的兩個進程IPC。
線程與進程的區別可概括爲如下4點:
1) 地址空間和其餘資源:進程之間相互獨立,同一進程的各線程間共享。某進程內的線程在其餘進程不可見。
2) 通訊:進程間通訊IPC,線程間能夠直接讀寫進程數據段(如全局變量)來進行通訊
------須要進程和互斥的輔助,保證數據的一致性。
3) 調度和切換:線程上下文切換比進程上下文切換要快得多。
4) 在多線程OS中,進程不是一個可執行的實體。
詳解進程:
上圖是任務管理器中的進程(經過此圖咱們能夠更容易理解進程)
進程一般是由程序,數據和進程控制塊組成(PCB)組成。
PCB(程序控制塊)內容:(主存中的進程形態)
標識符:標識符惟一標記一個進程,用於區別其餘進程。
狀態:標記進程的進程狀態,如運行態,阻塞狀態。
程序計數器:進程即將被執行的下一條指令的地址。
內存指針:程序代碼,進程數據相關的指針。
上下文數據:進程執行時處理器存儲的數據。
IO狀態信息:被進程IO操做所佔用的文件列表
記帳信息:使用處理器時間,時鐘數總和等。
以上幾點可概括爲:進程標識符,處理機狀態,進程調度信息,進程控制信息。
進程的三態模型
三種基本狀態:運行,就緒和阻塞
運行:當一個進程在處理機上運行時,則稱該進程處於運行狀態。
阻塞:阻塞也成等待或睡眠狀態,一個進程正在等待某一件事發生(例如請求I/O完成等)。
就緒:一個進程得到了除處理機外的一切資源,一旦獲得處理機便可運行。
五態模型
多個就緒進程稱爲就緒隊列
多個阻塞進程稱爲阻塞隊列
線程詳解
進程想要執行任務就須要依賴線程,一個進程至少有一個線程
多線程:想要理解多線程,先知道串行和並行
串行:所謂的串行就是按照必定的順序去進行的,以下圖所示,當任務A沒有完成時,任務B沒辦法執行
並行:能夠同時進程多個任務,以下圖
那究竟什麼是多線程呢
咱們拿一個安全軟件來舉個例子哦,若是說開啓這個軟件,即咱們建立了一個進程,
可是若是是單線程的話,那麼咱們這個殺毒軟件在殺毒的時候就不能邊清理垃圾。
可是若是是多線程的話,能夠邊殺毒,邊清理垃圾等等,這個是嚴格意義上的同一時刻發生的,沒有執行的前後順序。