說說程序與執行緒的區別與聯絡

2022-07-09 18:27:15 字數 3136 閱讀 1398

**:

應屆生經典面試題:說說程序與執行緒的區別與聯絡

這問題,估計計算機專業的同學在找研發等工作的時候都會遇到過。前幾天某老牌軟體廠商的**面試就提到了這一經典問題,今天招聘會上又有不少同學說在面試的時候被問到這點。在這裡我就起個頭,大家有啥想法意見等都歡迎回帖交流。

要了解二者的區別與聯絡,首先得對程序與執行緒有乙個巨集觀上的了解。

程序,是併發執行的程式在執行過程中分配和管理資源的基本單位,是乙個動態概念,竟爭計算機系統資源的基本單位。每乙個程序都有乙個自己的位址空間,即程序空間或(虛空間)。程序空間的大小 只與處理機的位數有關,乙個 16 位長處理機的程序空間大小為 216 ,而 32 位處理機的程序空間大小為 232 。程序至少有 5 種基本狀態,它們是:初始態,執行態,等待狀態,就緒狀態,終止狀態。

執行緒,在網路或多使用者環境下,乙個伺服器通常需要接收大量且不確定數量使用者的併發請求,為每乙個請求都建立乙個程序顯然是行不通的,——無論是從系統資源開銷方面或是響應使用者請求的效率方面來看。因此,作業系統中線程的概念便被引進了。執行緒,是程序的一部分,乙個沒有執行緒的程序可以被看作是單執行緒的。執行緒有時又被稱為輕權程序或輕量級程序,也是 cpu 排程的乙個基本單位。

說到這裡,我們對程序與執行緒都有了乙個大體上的印象,現在開始說說二者大致的區別。

程序的執行過程是線狀的,儘管中間會發生中斷或暫停,但該程序所擁有的資源只為該線狀執行過程服務。一旦發生程序上下文切換,這些資源都是要被保護起來的。這是程序巨集觀上的執行過程。而程序又可有單執行緒程序與多執行緒程序兩種。我們知道,程序有 乙個程序控制塊 pcb ,相關程式段 和 該程式段對其進行操作的資料結構集 這三部分,單執行緒程序的執行過程在巨集觀上是線性的,微觀上也只有單一的執行過程;而多執行緒程序在巨集觀上的執行過程同樣為線性的,但微觀上卻可以有多個執行操作(執行緒),如不同**片段以及相關的資料結構集。執行緒的改變只代表了 cpu 執行過程的改變,而沒有發生程序所擁有的資源變化。出了 cpu 之外,計算機內的軟硬體資源的分配與執行緒無關,執行緒只能共享它所屬程序的資源。與程序控制表和 pcb 相似,每個執行緒也有自己的執行緒控制表 tcb ,而這個 tcb 中所儲存的執行緒狀態資訊則要比 pcb 表少得多,這些資訊主要是相關指標用堆疊(系統棧和使用者棧),暫存器中的狀態資料。程序擁有乙個完整的虛擬位址空間,不依賴於執行緒而獨立存在;反之,執行緒是程序的一部分,沒有自己的位址空間,與程序內的其他執行緒一起共享分配給該程序的所有資源

執行緒可以有效地提高系統的執行效率,但並不是在所有計算機系統中都是適用的,如某些很少做程序排程和切換的實時系統。使用執行緒的好處是有多個任務需要處理機處理時,減少處理機的切換時間;而且,執行緒的建立和結束所需要的系統開銷也比程序的建立和結束要小得多。最適用使用執行緒的系統是多處理機系統和網路系統或分布式系統。

1. 執行緒的執行特性。

執行緒只有 3 個基本狀態:就緒,執行,阻塞。

執行緒存在 5 種基本操作來切換執行緒的狀態:派生,阻塞,啟用,排程,結束。

2. 程序通訊。

單機系統中程序通訊有 4 種形式:主從式,會話式,訊息或郵箱機制,共享儲存區方式。

主從式典型例子:終端控制程序和終端程序。

會話式典型例子:使用者程序與磁碟管理程序之間的通訊。

這問題,估計計算機專業的同學在找研發等工作的時候都會遇到過。前幾天某老牌軟體廠商的**面試就提到了這一經典問題,今天招聘會上又有不少同學說在面試的時候被問到這點。在這裡我就起個頭,大家有啥想法意見等都歡迎回帖交流。

要了解二者的區別與聯絡,首先得對程序與執行緒有乙個巨集觀上的了解。

程序,是併發執行的程式在執行過程中分配和管理資源的基本單位,是乙個動態概念,竟爭計算機系統資源的基本單位。每乙個程序都有乙個自己的位址空間,即程序空間或(虛空間)。程序空間的大小 只與處理機的位數有關,乙個 16 位長處理機的程序空間大小為 216 ,而 32 位處理機的程序空間大小為 232 。程序至少有 5 種基本狀態,它們是:初始態,執行態,等待狀態,就緒狀態,終止狀態。

執行緒,在網路或多使用者環境下,乙個伺服器通常需要接收大量且不確定數量使用者的併發請求,為每乙個請求都建立乙個程序顯然是行不通的,——無論是從系統資源開銷方面或是響應使用者請求的效率方面來看。因此,作業系統中線程的概念便被引進了。執行緒,是程序的一部分,乙個沒有執行緒的程序可以被看作是單執行緒的。執行緒有時又被稱為輕權程序或輕量級程序,也是 cpu 排程的乙個基本單位。

說到這裡,我們對程序與執行緒都有了乙個大體上的印象,現在開始說說二者大致的區別。

程序的執行過程是線狀的,儘管中間會發生中斷或暫停,但該程序所擁有的資源只為該線狀執行過程服務。一旦發生程序上下文切換,這些資源都是要被保護起來的。這是程序巨集觀上的執行過程。而程序又可有單執行緒程序與多執行緒程序兩種。我們知道,程序有 乙個程序控制塊 pcb ,相關程式段 和 該程式段對其進行操作的資料結構集 這三部分,單執行緒程序的執行過程在巨集觀上是線性的,微觀上也只有單一的執行過程;而多執行緒程序在巨集觀上的執行過程同樣為線性的,但微觀上卻可以有多個執行操作(執行緒),如不同**片段以及相關的資料結構集。執行緒的改變只代表了 cpu 執行過程的改變,而沒有發生程序所擁有的資源變化。出了 cpu 之外,計算機內的軟硬體資源的分配與執行緒無關,執行緒只能共享它所屬程序的資源。與程序控制表和 pcb 相似,每個執行緒也有自己的執行緒控制表 tcb ,而這個 tcb 中所儲存的執行緒狀態資訊則要比 pcb 表少得多,這些資訊主要是相關指標用堆疊(系統棧和使用者棧),暫存器中的狀態資料。程序擁有乙個完整的虛擬位址空間,不依賴於執行緒而獨立存在;反之,執行緒是程序的一部分,沒有自己的位址空間,與程序內的其他執行緒一起共享分配給該程序的所有資源

執行緒可以有效地提高系統的執行效率,但並不是在所有計算機系統中都是適用的,如某些很少做程序排程和切換的實時系統。使用執行緒的好處是有多個任務需要處理機處理時,減少處理機的切換時間;而且,執行緒的建立和結束所需要的系統開銷也比程序的建立和結束要小得多。最適用使用執行緒的系統是多處理機系統和網路系統或分布式系統。

1. 執行緒的執行特性。

執行緒只有 3 個基本狀態:就緒,執行,阻塞。

執行緒存在 5 種基本操作來切換執行緒的狀態:派生,阻塞,啟用,排程,結束。

2. 程序通訊。

單機系統中程序通訊有 4 種形式:主從式,會話式,訊息或郵箱機制,共享儲存區方式。

主從式典型例子:終端控制程序和終端程序。

會話式典型例子:使用者程序與磁碟管理程序之間的通訊。

程序與執行緒的區別與聯絡

程序 資源分配的基本單位,也是排程執行的基本單位 執行緒 程序中執行執行的最小單位,執行緒是作業系統可識別的最小執行和排程單位 兩者的關係 1.乙個執行緒只能屬於乙個程序,而乙個程序可以有多個執行緒 2.程序是資源分配的基本單位。同一程序中的所有執行緒共享該程序的資源包括 段 和常量 資料段 全域性...

程序與執行緒的區別與聯絡

程序,是併發執行的程式在執行過程中分配和管理資源的基本單位,是乙個動態概念,竟爭計算機系統資源的基本單位。每乙個程序都有乙個自己的位址空間,即程序空間或 虛空間 程序空間的大小 只與處理機的位數有關,乙個 16 位長處理機的程序空間大小為 216 而 32 位處理機的程序空間大小為 232 程序至少...

執行緒與程序的聯絡與區別

程序是乙個動態概念,表示程式在乙個資料集合上的一次動態執行過程。程序包含正在執行的乙個程式的所有狀態資訊 程序可以動態建立和結束,多個程序可以併發執行,不同程序間互不影響 作業系統實現 同時程序間又相互制約,它們因訪問共享資料 資源或程序間同步而產生制約。程式是靜態的,它是檔案。程序是動態的,是執行...