一文理解進程與線程 ---操做系統

進程與線程

 

進程:程序員

 

百度百科的定義:   進程(Process)是計算機中的程序關於某數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位,是操做系統結構的基礎。在早期面向進程設計的計算機結構中,進程是程序的基本執行實體;在當代面向線程設計的計算機結構中,進程是線程的容器。程序是指令、數據及其組織形式的描述,進程是程序的實體。編程

我的理解: 進程是可併發程序執行的時候的一個實例。從內核的觀點看,進程的目的就是分配系統資源(CPU時間,內存等)和調度的基本單位安全

 

線程:數據結構

百度百科的定義:   線程(thread)是操做系統可以進行運算調度的最小單位。它被包含在進程之中,是進程中的實際運做單位。一條線程指的是進程中一個單一順序的控制流,一個進程中能夠併發多個線程,每條線程並行執行不一樣的任務。多線程

我的理解:       線程是進程中的一個實體,是系統分配處理器時間資源的基本單元,是程序執行的最小單位。併發

 

進程VS線程:spa

操做系統實際運行的是線程,進程只是一個容器。操作系統

線程是操做系統進行運行調度的最小單位。線程

包含在進程之中,是進程中實際運行工做的單位。設計

一個進程能夠併發多個線程,每一個線程執行不一樣任務。

 

 

進程

線程

資源

資源分配的基本單位

不擁有資源

調度

獨立調度的基本單位

獨立調度的最小單位

系統開銷

進程系統開銷大

線程系統開銷小

通訊

進程IPC

讀寫贊成進程數據通訊

注:是指在不一樣進程之間傳播或交換信息。是一組編程接口,讓程序員可以協調不一樣的進程,使之能在一個操做系統裏同時運行,並相互傳遞、交換信息。

IPC的方式一般有管道(PIPE)(包括無名管道和命名管道)、消息隊列、信號量、共享內存、套接字(Socket)、Streams、旗語等。其中 Socket和Streams支持不一樣主機上的兩個進程IPC。

 

線程與進程的區別可概括爲如下4點:

1)  地址空間和其餘資源:進程之間相互獨立,同一進程的各線程間共享。某進程內的線程在其餘進程不可見。

2)  通訊:進程間通訊IPC,線程間能夠直接讀寫進程數據段(如全局變量)來進行通訊

------須要進程和互斥的輔助,保證數據的一致性。

3)  調度和切換:線程上下文切換比進程上下文切換要快得多。

4)  在多線程OS中,進程不是一個可執行的實體。

 

詳解進程:   

上圖是任務管理器中的進程(經過此圖咱們能夠更容易理解進程)

進程一般是由程序,數據和進程控制塊組成(PCB)組成。

  1. PCB:PCB是進程存在的惟一標誌;用於描述和控制進程運行的通用數據結構;記錄進程當前狀態和控制進程運行的所有信息;PCB使得進程是可以獨立運行的基本單位。
  2. 程序:程序部分描述了進程須要完成的功能
  3. 數據:數據部分包括程序執行時所需的數據及工做區。

 

PCB(程序控制塊)內容:(主存中的進程形態)

標識符:標識符惟一標記一個進程,用於區別其餘進程。

狀態:標記進程的進程狀態,如運行態,阻塞狀態。

程序計數器:進程即將被執行的下一條指令的地址。

內存指針:程序代碼,進程數據相關的指針。

上下文數據:進程執行時處理器存儲的數據。

IO狀態信息:被進程IO操做所佔用的文件列表

記帳信息:使用處理器時間,時鐘數總和等。

以上幾點可概括爲:進程標識符,處理機狀態,進程調度信息,進程控制信息。

 

進程的三態模型

三種基本狀態:運行,就緒和阻塞

運行:當一個進程在處理機上運行時,則稱該進程處於運行狀態。

阻塞:阻塞也成等待或睡眠狀態,一個進程正在等待某一件事發生(例如請求I/O完成等)。

就緒:一個進程得到了除處理機外的一切資源,一旦獲得處理機便可運行。

 

五態模型

多個就緒進程稱爲就緒隊列

多個阻塞進程稱爲阻塞隊列

 

線程詳解

進程想要執行任務就須要依賴線程,一個進程至少有一個線程

 

多線程:想要理解多線程,先知道串行和並行

串行:所謂的串行就是按照必定的順序去進行的,以下圖所示,當任務A沒有完成時,任務B沒辦法執行

 

 

並行:能夠同時進程多個任務,以下圖

那究竟什麼是多線程呢

 

咱們拿一個安全軟件來舉個例子哦,若是說開啓這個軟件,即咱們建立了一個進程,

可是若是是單線程的話,那麼咱們這個殺毒軟件在殺毒的時候就不能邊清理垃圾。

可是若是是多線程的話,能夠邊殺毒,邊清理垃圾等等,這個是嚴格意義上的同一時刻發生的,沒有執行的前後順序。

相關文章
相關標籤/搜索