1. 程式人生 > >程序和執行緒定義,概念,區別詳解

程序和執行緒定義,概念,區別詳解

程序的定義及基本概念:

狹義定義:程序是正在執行的程式的例項(an instance of a computer program that is being executed)。

組成

程序是一個實體。每一個程序都有它自己的地址空間,一般情況下,包括文字區域(text region)、資料區域(data region)和堆疊(stack region)。文字區域儲存處理器執行的程式碼;資料區域儲存變數和程序執行期間使用的動態分配的記憶體;堆疊區域儲存著活動過程呼叫的指令和本地變數。

結構

結構特徵:程序由程式、資料和程序控制塊三部分組成。

狀態

這裡寫圖片描述

排程演算法

實時系統中:FIFO(First Input First Output,先進先出演算法),SJF(Shortest Job First,最短作業優先演算法),SRTF(Shortest Remaining Time First,最短剩餘時間優先演算法)。 
互動式系統中:RR(Round Robin,時間片輪轉演算法),HPF(Highest Priority First,最高優先順序演算法),多級佇列,最短程序優先,保證排程,彩票排程,公平分享排程。

執行緒的定義及基本概念

一個標準的執行緒由執行緒ID,當前指令指標(PC),暫存器集合和堆疊組成。另外,執行緒是程序中的一個實體,是被系統獨立排程和分派的基本單位,執行緒自己不擁有系統資源,只擁有一點兒在執行中必不可少的資源,但它可與同屬一個程序的其它執行緒共享程序所擁有的全部資源。

執行緒之間的關係

一個執行緒可以建立和撤消另一個執行緒,同一程序中的多個執行緒之間可以併發執行。由於執行緒之間的相互制約,致使執行緒在執行中呈現出間斷性。執行緒也有就緒、阻塞和執行三種基本狀態。

特點

  • 輕型實體(執行緒的實體包括程式、資料和TCB。tcb用於指示被執行指令序列的程式計數器、保留區域性變數、少數狀態引數和返回地址等的一組暫存器和堆疊。)
  • 獨立排程和分派的基本單位。()
  • 可併發執行
  • 共享程序資源(所有執行緒都具有相同的地址空間(程序的地址空間),這意味著,執行緒可以訪問該地址空間的每一個虛地址;此外,還可以訪問程序所擁有的已開啟檔案、定時器、訊號量機構等。由於同一個程序內的執行緒共享記憶體和檔案,所以執行緒之間互相通訊不必呼叫核心。 

程序和執行緒的區別

(1)地址空間:程序內的一個執行單元;程序至少有一個執行緒;它們共享程序的地址空間;而程序有自己獨立的地址空間; 
(2)資源擁有:程序是資源分配和擁有的單位,同一個程序內的執行緒共享程序的資源 
(3)執行緒是處理器排程的基本單位,但程序不是. 
(4)二者均可併發執行.

執行緒同步

  • Mutex(互斥鎖):用來鎖住共用的記憶體,同時只有一個執行緒訪問
  • 這時的解決方法,就是在門口掛n把鑰匙。進去的人就取一把鑰匙,出來時再把鑰匙掛回原處。後到的人發現鑰匙架空了,就知道必須在門口排隊等著了。這種做法叫做”訊號量”(Semaphore),用來保證多個執行緒不會互相沖突。 
    不難看出,mutex是semaphore的一種特殊情況(n=1時)。也就是說,完全可以用後者替代前者。但是,因為mutex較為簡單,且效率高,所以在必須保證資源獨佔的情況下,還是採用這種設計。

總結:

程序是資源分配的基本單位,執行緒是排程的基本單位。程序包含執行緒,執行緒共用程序的資源。