當前位置:首頁 » 操作系統 » linux線程和進程的區別

linux線程和進程的區別

發布時間: 2022-08-04 08:01:41

linux進程與線程的區別和聯系

進程中可包含多個線程,最少1個,進程可控制進程內線程的運行暫停及結束,線程可共享進程全局變數,進程與進程是單獨個體,相互不能直接訪問各自線程及全局變數

⑵ 進程和線程的區別和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路由表

⑶ linux裡面,進程與線程到底有什麼本質的區別

線程:是進程中執行的一條路徑,是系統調度的最小單位。

進程:是正在運行的程序,是系統分配資源的最小單位。

線程與進程關系

1.一個進程可以有多個線程,一個線程只能屬於一個進程。

2.同一個進程下的所有線程共享該進程下的所有資源。

3.真正在處理機上運行的是線程,不是進程,線程是進程內的一個執行單元,是進程內的可調度實體。

Linux線程與進程區別

進程:

優點:多進程可以同時利用多個CPU,能夠同時進行多個操作。

缺點:耗費資源(創建一個進程重新開辟內存空間)。

進程不是越多越好,一般進程個數等於cpu個數。

線程:

優點:共享內存,尤其是進行IO操作(網路、磁碟)的時候(IO操作很少用cpu),可以使用多線程執行並發操作。

缺點:搶占資源。

⑷ Linux中線程和進程的區別

  1. 地址空間:進程至少有一個線程,它們共享進程的地址空間,而進程有自己獨立的地址空間

  2. 資源擁有:進程是資源分配和擁有的單位,同一個進程內的線程共享進程的資源

  3. 線程是處理器調度的基本單位,但進程不是

一個程序至少有一個進程,一個進程至少有一個線程,線程的劃分尺度小於進程

⑸ linux 進程與線程的區別

當把進程設計成同一時刻能夠做不止一件事,那麼這些事就可以用線程去處理!即多線程操作,這個時候要注意共享數據的加鎖,比如全局變數!

⑹ Linux中進程和線程的區別詳解

進程是程序的一次執行過程。
一個程序至少有一個進程,一個進程至少有一個線程.
線程的劃分尺度小於進程,使得多線程程序的並發性高。另外,進程在執行過程中擁有獨立的內存單元,而多個線程共享內存,從而極大地提高了程序的運行效率。
線程在執行過程中與進程還是有區別的。每個獨立的線程有一個程序運行的入口、順序執行序列和程序的出口。
但是線程不能夠獨立執行,必須依存在應用程序的進程中,由進程提供多個線程執行控制。

⑺ linux操作系統多進程和多線程的區別

進程:運行中的程序,-->執行過程稱之為進程。
線程:線程是輕量級的進程,是進程中的一條執行序列,一個進程至少有一條線程。
多線程優點:①無需跨進程邊界;②程序邏輯和控制方式簡單;③所有線程可以直接共享內存和變數;④線程方式消耗的總資源比進程少。
多進程優點:①每個進程相互獨立,不影響主程序的穩定性,子進程崩潰沒關系;②通過增加CPU就可以容易擴充性能;③可以盡量減少線程加鎖/解鎖的影響,極大提高性能。
多線程缺點:①每條線程與主程序共用地址空間,大小受限;②線程之間的同步和加鎖比較麻煩;③一個線程的崩潰可能影響到整個程序的穩定性;④到達一定的線程數之後,即使在增加CPU也無法提高性能。
多進程缺點:①邏輯控制復雜,需要和主程序交互;②需要跨進程邊界,如果有大數據傳輸,不適合;③多進程調度開銷比較大。
Linux系統中多進程和多線程的區別是什麼?
1、多進程中數據共享復雜、同步簡單;而多線程中數據共享簡單、同步復雜。
2、多進程佔用內存多、切換復雜、速度慢、CPU利用率低;而多線程佔用內存少、切換簡單、CPU利用率高。
3、多進程的編程簡單、調試簡單;而多線程的編程復雜、調試復雜。

⑻ linux進程和線程的區別 面試

haowawa586 的例子不好, switch case語句和進程線程的概念沒關系.

我拿Windows舉例子吧, 因為Linux的內核好像是沒有線程概念的.
進程和線程的區別在於粒度不同, 進程之間的變數(或者說是內存)是不能直接互相訪問的, 而線程可以, 線程一定會依附在某一個進程上執行.

我舉個例子, 你在Windows下開一個IE瀏覽器, 這個IE瀏覽器是一個進程.
你用瀏覽器去打開一個pdf, IE就去調用Acrobat去打開, 這時Acrobat是一個獨立的進程, 就是IE的子進程.
而IE自己本身同時用同一個進程開了2個網頁, 並且同時在跑兩個網頁上的腳本, 這兩個網頁的執行就是IE自己通過兩個線程實現的.

值得注意的是, 線程仍然是IE的內容, 而子進程Acrobat嚴格來說就不屬於IE了, 是另外一個程序.
之所以是IE的子進程, 只是受IE調用而啟動的而已.

⑼ 在windows中的進程、線程和在linux中的進程、線程有什麼區別

1、windows里的進程/線程是繼承自OS/2的。在windows里,"進程"是指一個程序,而"線程"是一個"進程"里的一個執行"線索"。從核心上講,windows的多進程與Linux並無多大的區別,在windows里的線程才相當於Linux的進程,是一個實際正在執行的代碼。但是,windows里同一個進程里各個線程之間是共享數據段的。這才是與Linux的進程最大的不同。2、在windows下,使用CreateThread函數創建線程,與Linux下創建進程同,windows線程不是從創建處開始運行的,而是由CreateThread指定一個函數,線程就從那個函數處開始運行。此程序同前面的UNIX程序一樣,由兩個線程各列印1000條信息。threadID是子線程的線程號,另外,全局變數g是子線程與父線程共享的,這就是與Linux最大的不同之處。大家可以看出,windows的進程/線程要比Linux復雜,在Linux要實現類似windows的線程並不難,只要fork以後,讓子進程調用ThreadProc函數,並且為全局變數開設共享數據區就行了,但在windows下就無法實現類似fork的功能了。所以現在windows下的C語言編譯器所提供的庫函數雖然已經能兼容大多數Linux/UNIX的庫函數,但卻仍無法實現fork。3、對於多任務系統,共享數據區是必要的,但也是一個容易引起混亂的問題,windows下,一個程序員很容易忘記線程之間的數據是共享的這一情況,一個線程修改過一個變數後,另一個線程卻又修改了它,結果引起程序出問題。但在Linux下,由於變數本來並不共享,而由程序員來顯式地指定要共享的數據,使程序變得更清晰與安全。在windows中的進程、線程和在linux中的進程、線程有什麼區別?

⑽ Linux中進程和線程的對比與區別

線程和進程是另一對有意義的概念,主要區別和聯系如下:

  • 進程是操作系統進行資源分配的基本單位,擁有完整的進程空間。進行系統資源分配的時候,除了CPU資源之外,不會給線程分配獨立的資源,線程所需要的資源需要共享。

  • 線程是進程的一部分,如果沒有進行顯示的線程分配,可以認為進程是單線程的;如果進程中建立了線程,則可認為系統是多線程的。

  • 多線程和多進程是兩種不同的概念。多線程與多進程有不同的資源共享方式。

  • 進程有進程式控制制塊PCB,系統通過PCB對進程進行調度。進程有線程式控制制塊TCP,但TCB所表示的狀態比PCB要少的多。

熱點內容
安卓微信王者號怎麼轉成蘋果 發布:2024-05-03 17:44:38 瀏覽:745
原子類源碼 發布:2024-05-03 17:44:19 瀏覽:165
安卓瀏覽圖片如何全屏 發布:2024-05-03 17:24:08 瀏覽:104
傳奇倉庫腳本 發布:2024-05-03 17:23:56 瀏覽:541
2010資料庫技術及應用 發布:2024-05-03 17:21:51 瀏覽:921
小米賬號密碼忘了怎麼 發布:2024-05-03 17:17:44 瀏覽:780
皇家農場腳本 發布:2024-05-03 16:46:41 瀏覽:458
順序存儲鏈式存儲 發布:2024-05-03 16:46:41 瀏覽:879
電腦配置低可以玩什麼fps游戲 發布:2024-05-03 16:46:39 瀏覽:421
qq刷紅包腳本 發布:2024-05-03 16:16:54 瀏覽:769