首頁 >運維 >linux運維 >linux進程和執行緒的區別與聯繫是什麼

linux進程和執行緒的區別與聯繫是什麼

WBOY
WBOY原創
2022-07-29 16:42:334353瀏覽

linux進程和執行緒:1、區別是不同的作業系統資源管理方式,進程有獨立的位址空間,而執行緒之間沒有單獨的位址空間;2、聯繫是一個執行緒可以建立和撤銷另一個線程,同一個行程中的多個執行緒之間可以並發執行,執行緒只是一個行程中的不同執行路徑。

linux進程和執行緒的區別與聯繫是什麼

本教學操作環境:linux7.3系統、Dell G3電腦。

linux進程和執行緒的差異與聯繫是什麼

聯繫:

##一個執行緒可以建立和撤銷另一個線程;同一個進程中的多個線程之間可以並發執行.

相對進程而言,線程是一個更接近執行體的概念,它可以與同進程中的其他線程共享數據,但擁有自己的堆疊空間,擁有獨立的執行序列。

區別:

進程和執行緒的主要差異在於它們是不同的作業系統資源管理方式。進程有獨立的位址空間,一個進程崩潰後,在保護模式下不會對其它進程產生影響,而執行緒只是一個進程中的不同執行路徑。執行緒有自己的堆疊和局部變量,但執行緒之間沒有單獨的位址空間,一個執行緒死掉就等於整個行程死掉,所以多行程的程式要比多執行緒的程式健壯,但在行程切換時,耗費資源較大,效率差一些。但對於一些要求同時進行並且要共享某些變數的並發操作,只能用線程,不能用進程。

  • 簡而言之,一個程式至少有一個行程,一個行程至少有一個執行緒.

  • 執行緒的分割尺度小於進程,使得多執行緒程式的並發性高。

  • 另外,進程在執行過程中擁有獨立的記憶體單元,而多個執行緒共享記憶體,從而大大提高了程式的運作效率。

  • 執行緒在執行過程中與進程還是有區別的。每個獨立的執行緒都有一個程式運行的入口、順序執行序列和程式的出口。但是執行緒不能夠獨立執行,必須依存在應用程式中,由應用程式提供多個執行緒執行控制。

  • 從邏輯角度來看,多執行緒的意義在於一個應用程式中,有多個執行部分可以同時執行。但作業系統並沒有將多個執行緒看做多個獨立的應用,來實現進程的調度和管理以及資源分配。這就是進程和執行緒的重要區別。

擴充知識

#在許多經典的作業系統教科書中,總是把行程定義為程式的執行實例,它並不執行什麼, 只是維護應用程式所需的各種資源,而執行緒則是真正的執行實體。

為了讓行程完成一定的工作,行程必須至少包含一個執行緒。

linux進程和執行緒的區別與聯繫是什麼

進程,直觀點說,保存在硬碟上的程式運行以後,會在記憶體空間裡形成一個獨立的記憶體,這個記憶體有自己的位址空間,有自己的堆,上級掛靠單位是作業系統。

執行緒存在與進程當中,是作業系統調度執行的最小單位。說通俗點,線 程 就 是 幹 活 的 。 \color{red}{線程就是工作的。 }線就是工作的。

進程是具有一定獨立功能的程式關於某個資料集合上的一次運行活動,進程是系統進行資源分配和調度的一個獨立單位。執行緒是進程的一個實體,是 CPU 調度和分派的基本單位,它是比進程更小的能獨立運作的基本單位。線程本身基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(如程序計數器,一組寄存器和棧),但是它可與同屬一個進程的其他的線程共享進程所擁有的全部資源。

如果說進程是個資源管家,負責從主人那裡要資源的話,那麼線程就是乾活的苦力。如果說進程是資源管家,負責從主人那裡要資源的話,那麼執行緒就是工作的苦力。一個管家必須完成一項工作,就需要最少一個苦力,也就是說,一個行程最少包含一個線程,也可以包含多個線程。苦力要工作,就需要依賴管家,所以說一個線程,必須屬於某一個進程。行程有自己的位址空間,執行緒使用行程的位址空間,也就是說,行程裡的資源,執行緒都是有權存取的,比如說堆啊,棧啊,靜態儲存區什麼的。

線程就是個無產階級,但無產階級幹活,總得有自己的勞動工具吧,這個勞動工具就是棧,線程有自己的棧,這個棧仍然是使用進程的地址空間,只是這塊空間被線程標記為了棧。每個執行緒都會有自己私有的棧,這個棧是不可以被其他執行緒所存取的。

程式所維護的是程式所包含的資源(靜態資源), 如:位址空間,開啟的檔案句柄集,檔案系統狀態,訊號處理handler,等;

執行緒所維護的運行相關的資源(動態資源),如:運行棧,調度相關的控制信息,待處理的信號集,等;

線程和進程在使用上各有優缺點:線程執行開銷小,但不利於資源的管理與保護;而進程正相反。

推薦學習:Linux影片教學

#

以上是linux進程和執行緒的區別與聯繫是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn