當前位置:生活全書館 >

綜合知識

> linux中執行緒和程序的區別與聯絡

linux中執行緒和程序的區別與聯絡

linux中執行緒和程序的區別與聯絡

1.linux程序和執行緒:

2.1、區別是不同的作業系統資源管理方式,程序有獨立的地址空間,而執行緒之間沒有單獨的地址空間;

3.2、聯絡是一個執行緒可以建立和撤銷另一個執行緒,同一個程序中的多個執行緒之間可以併發執行,執行緒只是一個程序中的不同執行路徑。

小編還為您整理了以下內容,可能對您也有幫助:

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

執行緒和程序的關係和區別如下:

關係:一個程序可以有多個執行緒,但至少有一個執行緒,而一個執行緒只能在一個程序的地址空間內活動。資源分配給程序,同一個程序的所有執行緒共享該程序所有資源。CPU分配給執行緒,即真正在處理器執行的是執行緒。

區別:執行緒是程式執行時指令流的最小單位,程序是指一個具有一定功能的程式,而執行緒是程序的一部分,描述指令流執行狀態。一個執行緒是一個任務(一個程式段)的一次執行過程,執行緒不佔有記憶體空間,它包括在程序的記憶體空間中。

執行緒的定義

執行緒是作業系統能夠進行運算排程的最小單位,它被包含在程序之中,是程序中的實際運作單位。一條執行緒指的是程序中一個單一順序的控制流,一個程序中可以併發多個執行緒,每條執行緒並行執行不同的任務。

執行緒是排程和分派的基本單位,執行緒可以為作業系統核心排程的核心執行緒,如Win32執行緒;由使用者程序自行排程的使用者執行緒,如Linux平臺的POSIX Thread;或者由核心與使用者程序,如Windows 7的執行緒,進行混合排程。

以上內容參考:百度百科—執行緒

程序和執行緒的區別和linux執行狀態檢視簡單

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

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

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

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

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

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

———————————-

1. 執行緒的執行特性。

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

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

2. 程序通訊。

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

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

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

———————————-

參考書籍:計算機作業系統教程(第 3 版)清華大學出版社張堯學 史美林 張高

在java程式設計中就經常用到程序和執行緒的概念。

1、執行緒:程式中單獨順序的控制流

執行緒本身依靠程序執行,不能存在,執行緒是程序中的順序控制流,只能使用系統分配給程序的資源和環境,執行緒沒有的地址空間。

2、程序:執行中的程式

系統會為每個程序建立一個PID,一個程序可以包含一個或多個執行緒,一個程序至少包含一個執行緒,每個執行緒也會有自己的ID,但是這只是在它所屬的程序之內,不屬於系統ID。

3、單執行緒:程式中只存在一個執行緒,實際上函式執行的主方法就是一個主執行緒

4、多執行緒:就是在一個程序中執行多個任務,多執行緒的目的是為了更好地使用CPU資源。

前臺和後臺

我們這裡也要注意前臺和後臺的區別,前臺一般就是我們能夠看到的正在執行的程式,一般系統的很多服務都是以後臺的形式存在,也就是我們看不到它們在執行,但是它們一般都會常駐在系統中,直到關機才會結束。

linux中檢視程序的ps和top

ps指令主要是用來檢視目前系統中,有哪些程序正在執行,以及他們執行的狀況。

ps -a 顯示當前終端的所有程序資訊

ps -u 以使用者的格式顯示程序資訊

ps -x 顯示後臺程序執行的引數123

可以根據程序的PID來終止程序

kill 程序PIDkill -9 程序PID //強制終止程序12

此外可以使用killall命令以名字的方式來殺死程序

程序動態監控top

1、監視特定使用者

先執行top命令,再輸入u,之後再輸入需要監視的使用者,然後回車即可,你將會看到顯示的程序都是你所指定的使用者正在執行的程式

2、殺死特定程序

先執行top命令,再輸入k,再輸入你要殺死的程序ID,然後回車即可。

3、指定動態重新整理時間

top -d 10 //指定系統更新程序的時間為10秒1

PS:我們從top顯示的內容可以獲取一些有用的資訊,其中zombie代表的是殭屍程序,即計算機無法回收記憶體的程序,Load average顯示的是當前計算機負載情況,當這些值很高的時候說明計算機CPU佔用率很高,需要注意。還有顯示了計算機儲存空間的使用情況。其中PID=1的程序是系統初始執行的總程序,很多程序都是由它開啟的,這是一個特別重要的程序。

監控網路狀態資訊

顯示網路統計資訊的命令netstat,此命令用來顯示整個系統目前的網路情況,例如目前的連結,資料包傳遞資料或是路由表內容。

netstat -an//按一定順序排列netstat -anp //加上p就會顯示程序號和相關程式12

顯示資料包經歷歷程命令

traceroute 域名或者IP1

特別要注意在windows下面該命令是tracert

route命令用於顯示和操作IP路由表

程序與執行緒的區別在哪裡

程序與執行緒的區別?程序與執行緒的區別

方法

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

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

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

程序的特徵:

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

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

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

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

執行緒:執行緒是程序中的一個實體,作為系統排程和分派的基本單位。Linux下的執行緒看作輕量級程序。

執行緒的性質:

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

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

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

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

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

程序和執行緒的區別

程序和執行緒的區別如下:

1、功能不同

程序是計算機中的程式關於某資料集合上的一次執行活動,是系統進行資源分配和排程的基本單位,是作業系統結構的基礎。

執行緒是作業系統能夠進行運算排程的最小單位。它被包含在程序之中,是程序中的實際運作單位。

2、工作原理不同

在早期面向程序設計的計算機結構中,程序是程式的基本執行實體;在當代面向執行緒設計的計算機結構中,程序是執行緒的容器。程式是指令、資料及其組織形式的描述,程序是程式的實體。

執行緒是排程和分派的基本單位。執行緒可以為作業系統核心排程的核心執行緒,如Win32執行緒;由使用者程序自行排程的使用者執行緒,如Linux平臺的POSIX Thread;或者由核心與使用者程序,如Windows 7的執行緒,進行混合排程。

3、作用不同

程序是作業系統中最基本、重要的概念。是多道程式系統出現後,為了刻畫系統內部出現的動態情況,描述系統內部各道程式的活動規律引進的一個概念,所有多道程式設計作業系統都建立在程序的基礎上。

通常在一個程序中可以包含若干個執行緒,它們可以利用程序所擁有的資源。在引入執行緒的作業系統中,通常都是把程序作為分配資源的基本單位,而把執行緒作為執行和排程的基本單位。

4、定義不同

程序指在系統中正在執行的一個應用程式;程式一旦執行就是程序;或者更專業化來說:程序是指程式執行時的一個例項,即它是程式已經執行到課中程度的資料結構的彙集。從核心的觀點看,程序的目的就是擔當分配系統資源(CPU時間、記憶體等)的基本單位。

執行緒是指系統分配處理器時間資源的基本單元,或者說程序之內執行的一個單元執行流。程序——資源分配的最小單位,執行緒也就是程式執行的最小單位。

5、結構程式不同

現在程式結構上,舉一個簡明易懂的列子:當我們使用程序的時候,我們不自主的使用if else巢狀來判斷pid,使得程式結構繁瑣,但是當我們使用執行緒的時候,基本上可以甩掉它,當然程式內部執行功能單元需要使用的時候還是要使用,所以執行緒對程式結構的改善有很大幫助。

  • 文章版權屬於文章作者所有,轉載請註明 https://shqsg.com/zonghezhishi/0l2m58.html