進程和線程的區別和聯繫

進程和線程的區別和聯繫

執行的程序被稱爲進程,操作系統會爲進程單獨分配所需的資源,所以進程是單獨分配和管理資源的一個基本單位。

但是進程存在着很多缺陷,主要集中在兩點:
(1).進程只能在同一時間幹一件事情,如果想同時幹兩件事或多件事情,進程就無能爲力了。
(2).進程在執行的過程中如果由於某種原因阻塞了,例如等待輸入,整個進程就會掛起,其他與輸入無關的工作也必須等待輸入結束後才能順序執行。

爲了解決上述兩點缺陷,引入了線程這個概念。

線程是進程的一個實體,也是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位,有時又被稱爲輕權進程或輕量級進程,相對進程而言,線程是一個更加接近於執行體的概念,進程在執行過程中擁有獨立的內存單元,而線程自己基本上不擁有系統資源,也沒有自己的地址空間,只擁有一點在運行中必不可少的資源(如程序計數器,一組寄存器和棧),線程的改變只代表了 CPU 執行過程的改變,而沒有發生進程所擁有的資源變化。除了CPU 之外,計算機內的軟硬件資源的分配與線程無關,但是它可與同屬一個進程的其他的線程共享進程所擁有的全部資源。

而一個進程至少擁有一個線程,一個進程可以擁有多個線程,線程本身並沒有單獨的內存空間和資源,一個進程下的多個線程共同擁有該進程的資源。

因此,多個進程的健壯性更好,每個進程都有自己單獨的空間和變量,一個崩潰不會影響其餘的進程。而線程的話,一個線程崩潰,和它使用共同空間的其餘線程也會崩潰。

進程和線程的主要差別在於操作系統並沒有將多個線程看作多個獨立的應用,來實現進程的調度和管理以及資源分配。進程有獨立的地址空間,一個進程崩潰後,在保護模式下不會對其它進程產生影響,而線程只是一個進程中的不同執行路徑。線程有自己的堆棧和局部變量,但線程之間沒有單獨的地址空間,一個線程死掉就等於整個進程死掉,所以多進程的程序要比多線程的程序健壯,但在進程切換時,耗費資源較大,效率要差一些,對於一些要求同時進行並且又要共享某些變量的併發操作,只能用線程,不能用進程,每個獨立的線程有一個程序運行的入口、順序執行序列和程序的出口,但是線程不能夠獨立執行,必須依存在應用程序中,由應用程序提供多個線程執行控制。

參考:

進程概念

  進程是表示資源分配的基本單位,又是調度運行的基本單位。例如,用戶運行自己的程序,系統就創建一個進程,併爲它分配資源,包括各種表格、內存空間、磁盤空間、I/O設備等。然後,把該進程放人進程的就緒隊列。進程調度程序選中它,爲它分配CPU以及其它有關資源,該進程才真正運行。所以,進程是系統中的併發執行的單位。

在Mac、Windows NT等採用微內核結構的操作系統中,進程的功能發生了變化:它只是資源分配的單位,而不再是調度運行的單位。在微內核系統中,真正調度運行的基本單位是線程。因此,實現併發功能的單位是線程。

線程概念

  線程是進程中執行運算的最小單位,亦即執行處理機調度的基本單位。如果把進程理解爲在邏輯上操作系統所完成的任務,那麼線程表示完成該任務的許多可能的子任務之一。例如,假設用戶啓動了一個窗口中的數據庫應用程序,操作系統就將對數據庫的調用表示爲一個進程。假設用戶要從數據庫中產生一份工資單報表,並傳到一個文件中,這是一個子任務;在產生工資單報表的過程中,用戶又可以輸人數據庫查詢請求,這又是一個子任務。這樣,操作系統則把每一個請求――工資單報表和新輸人的數據查詢表示爲數據庫進程中的獨立的線程。線程可以在處理器上獨立調度執行,這樣,在多處理器環境下就允許幾個線程各自在單獨處理器上進行。操作系統提供線程就是爲了方便而有效地實現這種併發性

引入線程的好處

(1)易於調度。

(2)提高併發性。通過線程可方便有效地實現併發性。進程可創建多個線程來執行同一程序的不同部分。

(3)開銷少。創建線程比創建進程要快,所需開銷很少。。

(4)利於充分發揮多處理器的功能。通過創建多線程進程(即一個進程可具有兩個或更多個線程),每個線程在一個處理器上運行,從而實現應用程序的併發性,使每個處理器都得到充分運行。

進程和線程的關係

(1)一個線程只能屬於一個進程,而一個進程可以有多個線程,但至少有一個線程。線程是操作系統可識別的最小執行和調度單位。

(2)資源分配給進程,同一進程的所有線程共享該進程的所有資源。 同一進程中的多個線程共享代碼段(代碼和常量),數據段(全局變量和靜態變量),擴展段(堆存儲)。但是每個線程擁有自己的棧段,棧段又叫運行時段,用來存放所有局部變量和臨時變量。

(3)處理機分給線程,即真正在處理機上運行的是線程。

(4)線程在執行過程中,需要協作同步。不同進程的線程間要利用消息通信的辦法實現同步。

 

要了解二者的區別與聯繫,首先得對進程與線程有一個宏觀上的瞭解。

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

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

    說到這裏,我們對進程與線程都有了一個大體上的印象,現在開始說說二者大致的區別。

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章