1. 程式人生 > >進程和線程的區別與聯系

進程和線程的區別與聯系

寄存器 進程的地址空間 線程 單元 進程 等於 實現 blog 實體

轉:http://www.cnblogs.com/wangzhenghua/p/4447570.html

引入線程是為了減少程序在並發執行時所付出的時空開銷。

屬性:

  1. 輕型實體。它不擁有系統資源,只是有一點必不可少的、能保證獨立運行的資源。
  2. 獨立調度和分派的基本單位。在多線程OS中,線程是獨立運行的基本單位,因而也是獨立調度和分派的基本單位,但由於線程很輕,故線程的切換非常迅速且開銷小。
  3. 可並發執行。在一個進程中的多個線程之間可以並發執行,甚至允許在一個進程中的所有線程都能並發執行;同樣,不同進程中的線程也能並發執行。
  4. 共享進程資源。在同一個進程中的各個線程都可以共享該進程所擁有的資源,這首先表現在:所有線程都具有相同的地址空間(進程的地址空間),這意味著,線程可以訪問該地址空間中的每一個虛地址;此外,還可以訪問進程所擁有的已打開文件、定時器、信號量機構等。

線程的創建和終止

雖然已被終止但尚未釋放資源的線程,仍可以被需要他的線程所調用,以使被終止的線程重新恢復運行。為此,調用者線程須調用一條被稱為“等待線程終止”的連接命令,來與該線程重新連接,如果在一個調用者線程調用"等待線程終止"的連接命令,試圖與指定線程相連接時,若指定線程尚未被終止,則調用連接命令的線程將會阻塞,直至指定線程被終止後,才能實現它與調用者線程的連接並繼續執行,若指定線程已被終止,則調用線程不會被阻塞而是繼續執行。

多線程OS中的進程:

  1. 作為系統資源分配的單位。在多線程OS中,仍然是以進程作為系統資源分配的基本單位,在任何一個進程中所擁有的資源包括:受到分別保護的用戶地址空間、用於實現進程間和線程間同步和通信的機制、已打開的文件和已收申請到I/O設備,以及一張由核心進程維護的地址映射表,該表用於實現用戶程序的邏輯地址到其內存物理地址的映射。
  2. 可包括多個線程。通常一個進程都含有多個相對獨立的線程,其數目可多可少,但至少也要有一個線程,由進程為這些線程提供資源及運行環境,使這些線程可並發執行。在OS中的所有線程都只能屬於某個特定的進程。
  3. 進程不是一個可執行的實體。在多線程OS中,是把線程作為獨立運行的基本單位,所以此時的進程已不再是一個可執行的實體。

定義:

一、進程是具有一定獨立功能的程序關於某個數據集合上的一次運行活動,是系統進行資源分配和調度的一個獨立單位。
二、線程是進程的一個實體,是CPU調度和分派的基本單位,他是比進程更小的能獨立運行的基本單位,線程自己基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(如程序計數器,一組寄存器和棧),一個線程可以創建和撤銷另一個線程;

進程和線程的關系:

(1)一個線程只能屬於一個進程,而一個進程可以有多個線程,但至少有一個線程。
(2)資源分配給進程,同一進程的所有線程共享該進程的所有資源。
(3)線程在執行過程中,需要協作同步。不同進程的線程間要利用消息通信的辦法實現同步。
(4)處理機分給線程,即真正在處理機上運行的是線程。
(5)線程是指進程內的一個執行單元,也是進程內的可調度實體。
線程與進程的區別:
(1)調度:線程作為調度和分配的基本單位,進程作為擁有資源的基本單位。
(2)並發性:不僅進程之間可以並發執行,同一個進程的多個線程之間也可以並發執行。
(3)擁有資源:進程是擁有資源的一個獨立單位,線程不擁有系統資源,但可以訪問隸屬於進程的資源。
(4) 系統開銷:在創建或撤銷進程的時候,由於系統都要為之分配和回收資源,導致系統的明顯大於創建或撤銷線程時的開銷。但進程有獨立的地址空間,進程崩潰後, 在保護模式下不會對其他的進程產生影響,而線程只是一個進程中的不同的執行路徑。線程有自己的堆棧和局部變量,但線程之間沒有單獨的地址空間,一個線程死 掉就等於整個進程死掉,所以多進程的程序要比多線程的程序健壯,但是在進程切換時,耗費的資源較大,效率要差些。

線程的劃分尺度小於進程,使得多線程程序的並發性高。

另外,進程在執行過程中擁有獨立的內存單元,而多個線程共享內存,從而極大的提高了程序運行效率。

線程在執行過程中,每個獨立的線程有一個程序運行的入口,順序執行序列和程序的出口。但是線程不能夠獨立執行,必須依存在應用程序中,有應用程序提供多個線程執行控制。

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

進程和線程的區別與聯系