程序與執行緒的定義 關係及區別

2022-07-29 15:06:13 字數 3500 閱讀 1290

程序與執行緒的定義、關係及區別

一、程序的定義

程序:指在系統中能獨立執行並作為資源分配的基本單位,它是由一組機器指令、資料和堆疊等組成的,是乙個能獨立執行的活動實體。

程序一般有三個狀態:就緒狀態、執行狀態和等待狀態【或稱阻塞狀態】;程序只能由父程序建立,系統中所有的程序形成一種程序樹的層次體系;掛起命令可由程序自己和其他程序發出,但是解除掛起命令只能由其他程序發出。

程序控制塊(pcb):pcb不但可以記錄程序的屬性資訊,以便作業系統對程序進行控制和管理,而且pcb標誌著程序的存在,作業系統根據系統中是否有該程序的程序控制塊pcb而知道該程序存在與否。系統建立程序的同時就建立該程序的pcb,在撤銷乙個程序時,也就撤銷其pcb,故程序的pcb對程序來說是它存在的具體的物理標誌和體現。一般pcb包括以下三類資訊:程序標識資訊;處理器狀態資訊;程序控制資訊。

由程式段、相關的資料段和pcb三部分構成了程序實體(又稱程序印像),一般,我們把程序實體就簡稱為程序。

程序的特徵:

1.動態性:程序的實質是程式的一次執行過程,程序是動態產生,動態消亡的。

2.併發性:任何程序都可以同其他程序一起併發執行。

3.獨立性:程序是乙個能獨立執行的基本單位,同時也是系統分配資源和排程的獨立單位。

4.非同步性:由於程序間的相互制約,使程序具有執行的間斷性,即程序按各自獨立的、不可預知的速度向前推進。

二、執行緒的定義

執行緒:執行緒是程序中的乙個實體,作為系統排程和分派的基本單位。

執行緒的性質:

1.執行緒是程序內的乙個相對獨立的可執行的單元。若把程序稱為任務的話,那麼執行緒則是應用中的乙個子任務的執行。

2.由於執行緒是被排程的基本單元,而程序不是排程單元。所以,每個程序在建立時,至少需要同時為該程序建立乙個執行緒。即程序中至少要有乙個或乙個以上的執行緒,否則該程序無法被排程執行。

3.程序是被分給並擁有資源的基本單元。同一程序內的多個執行緒共享該程序的資源,但執行緒並不擁有資源,只是使用他們。

4.執行緒是作業系統中基本排程單元,因此執行緒中應包含有排程所需要的必要資訊,且在生命週期中有狀態的變化。

5.由於共享資源【包括資料和檔案】,所以執行緒間需要通訊和同步機制,且需要時執行緒可以建立其他執行緒,但執行緒間不存在父子關係。

多執行緒使用的情形:

前台和後台工作情況;

非同步處理工作情況;

需要加快執行速度情況;

組織複雜工作的情況;

同時有多個使用者服務請求的情況等。

執行緒機制的優點:

1.建立和撤銷執行緒的開銷較之程序要少。建立執行緒時只需要建立執行緒控制表相應的表目,或有關佇列,而建立程序時,要建立pcb表和初始化,進入有關程序佇列,建立它的位址空間和所需資源等。

3.執行緒機制也增加了通訊的有效性。程序間的通訊往往要求核心的參與,以提供通訊機制和保護機制,而執行緒間的通訊是在同一程序的位址空間內,共享主存和檔案,無需核心參與。

三、程序與執行緒之間的關係

從一定意義上講,程序就是乙個應用程式在處理機上的一次執行過程,它是乙個動態的概念,而執行緒是程序中的一部分,程序包含多個執行緒在執行。

在引入執行緒的作業系統中,通常都是把程序作為分配資源的基本單位,而把執行緒作為獨立執行和獨立排程的基本單位。由於執行緒比程序更小,基本上不擁有系統資源,故對它的排程所付出的開銷就會小得多,能更高效的提高系統內多個程式間併發執行的程度。

舉例說明:

程序:北京地鐵單位

執行緒:北京地鐵1號線、2號線、5號線........15號線

北京地鐵單位的所有地鐵線路共享著北京坐地鐵的所有客源(相當於程序中的資源,所以程序屬於資源單位),而各線路負責將客源輸送到指定地點(執行操作,所以執行緒屬於執行單位)。

四、程序與執行緒之間的區別

1、排程:

在傳統的作業系統中,cpu排程和分派的基本單位是程序。而在引入執行緒的作業系統中,則把執行緒作為cpu排程和分派的基本單位,程序則作為資源擁有的基本單位,從而使傳統程序的兩個屬性分開,執行緒程式設計輕裝執行,這樣可以顯著地提高系統的併發性。同一程序中線程的切換不會引起程序切換,從而避免了昂貴的系統呼叫,但是在由乙個程序中的執行緒切換到另一程序中的執行緒,依然會引起程序切換。

2、併發性:

在引入執行緒的作業系統中,不僅程序之間可以併發執行,而且在乙個程序中的多個執行緒之間也可以併發執行,因而使作業系統具有更好的併發性,從而更有效地提高系統資源和系統的吞吐量。例如,在乙個為引入執行緒的單cpu作業系統中,若僅設定乙個檔案服務程序,當它由於某種原因被封鎖時,便沒有其他的檔案服務程序來提供服務。在引入執行緒的作業系統中,可以在乙個檔案服務程序設定多個服務執行緒。當第乙個執行緒等待時,檔案服務程序中的第二個執行緒可以繼續執行;當第二個執行緒封鎖時,第三個執行緒可以繼續執行,從而顯著地提高了檔案服務的質量以及系統的吞吐量。

3、擁有資源:

不論是引入了執行緒的作業系統,還是傳統的作業系統,程序都是擁有系統資源的乙個獨立單位,他可以擁有自己的資源。一般地說,執行緒自己不能擁有資源(也有一點必不可少的資源),但它可以訪問其隸屬程序的資源,亦即乙個程序的**段、資料段以及系統資源(如已開啟的檔案、i/o裝置等),可供同乙個程序的其他所有執行緒共享。

4、獨立性:

在同一程序中的不同執行緒之間的獨立性要比不同程序之間的獨立性低得多。這是因為為了防止程序之間彼此干擾和破壞,每個程序都擁有乙個獨立的位址空間和其它資源,除了共享全域性變數外,不允許其它程序的訪問。但是同一程序中的不同執行緒往往是為了提高併發性以及進行相互之間的合作而建立的,它們共享程序的記憶體位址空間和資源,如每個執行緒都可以訪問它們所屬程序位址空間中的所有位址,如乙個執行緒的堆疊可以被其它執行緒讀、寫,甚至完全清除。 

5、系統開銷:

由於在建立或撤銷程序時,系統都要為之分配或**資源,如記憶體空間、i/o裝置等。因此,作業系統為此所付出的開銷將顯著地大於在建立或撤消執行緒時的開銷。在程序切換時,涉及到整個當前程序cpu環境的儲存環境的設定以及新被排程執行的cpu環境的設定,而執行緒切換只需儲存和設定少量的暫存器的內容,並不涉及儲存器管理方面的操作,可見,程序切換的開銷也遠大於執行緒切換的開銷。此外,由於同一程序中的多個執行緒具有相同的位址空間,致使他們之間的同步和通訊的實現也變得比較容易。在有的系統中,現成的切換、同步、和通訊都無需作業系統核心的干預。

6、支援多處理機系統:

在多處理機系統中,對於傳統的程序,即單執行緒程序,不管有多少處理機,該程序只能執行在乙個處理機上。但對於多執行緒程序,就可以將乙個程序中的多個執行緒分配到多個處理機上,使它們並行執行,這無疑將加速程序的完成。因此,現代處理機os都無一例外地引入了多執行緒。

參考文件:

CPU程序與執行緒的關係和區別

程序是具有一定獨立功能的程式關於某個資料集合上的一次執行活動,程序是系統進行資源分配和排程的乙個獨立單位。執行緒是程序的乙個實體,是cpu排程和分派的基本單位,它是比程序更小的能獨立執行的基本單位。程序和執行緒的關係 1 乙個執行緒只能屬於乙個程序,而乙個程序可以有多個執行緒,但至少有乙個執行緒。2...

執行緒(定義及和程序之間的區別)

1 什麼是執行緒 執行緒是輕量級的程序 執行緒是程序內部的一條執行序列,或者執行流,每個程序至少有一條執行緒,稱之為主線程,從 角度看,就是main函式的函式體,在主線程中可以通過執行緒庫建立其他執行緒 函式執行緒 主線程和函式執行緒會同時向下執行。2 程序與執行緒的區別 我們可以模擬一下,cpu就...

執行緒與程序的區別

原文 程序 process 和執行緒 thread 是作業系統的基本概念,但是它們比較抽象,不容易掌握。最近,我讀到一篇材料,發現有乙個很好的模擬,可以把它們解釋地清晰易懂 1 計算機的核心是cpu,它承擔了所有的計算任務。它就像一座工廠,時刻在執行。2 假定工廠的電力有限,一次只能供給乙個車間使用...