當前位置:生活全書館 >

綜合知識

> 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/zh-hk/zonghezhishi/0l2m58.html