進程和線程的區別與關係

進程、線程原理圖

二者區別

1、首先是定義

進程:是執行中一段程序,即一旦程序被載入到內存中並準備執行,它就是一個進程。進程是表示資源分配的的基本概念,又是調度運行的基本單位,是系統中的併發執行的單位。

線程:單個進程中執行中每個任務就是一個線程。線程是進程中執行運算的最小單位。

2、一個線程只能屬於一個進程,但是一個進程可以擁有多個線程。多線程處理就是允許一個進程中在同一時刻執行多個任務。

3、線程是一種輕量級的進程,與進程相比,線程給操作系統帶來側創建、維護、和管理的負擔要輕,意味着線程的代價或開銷比較小。

4、線程沒有地址空間,線程包含在進程的地址空間中。線程上下文只包含一個堆棧、一個寄存器、一個優先權,線程文本包含在他的進程 的文本片段中,進程擁有的所有資源都屬於線程。所有的線程共享進程的內存和資源。 同一進程中的多個線程共享代碼段(代碼和常量),數據段(全局變量和靜態變量),擴展段(堆存儲)。但是每個線程擁有自己的棧段, 寄存器的內容,棧段又叫運行時段,用來存放所有局部變量和臨時變量。

5、父和子進程使用進程間通信機制,同一進程的線程通過讀取和寫入數據到進程變量來通信。

6、進程內的任何線程都被看做是同位體,且處於相同的級別。不管是哪個線程創建了哪一個線程,進程內的任何線程都可以銷燬、掛起、恢復和更改其它線程的優先權。線程也要對進程施加控制,進程中任何線程都可以通過銷燬主線程來銷燬進程,銷燬主線程將導致該進程的銷燬,對主線程的修改可能影響所有的線程。

7、子進程不對任何其他子進程施加控制,進程的線程可以對同一進程的其它線程施加控制。子進程不能對父進程施加控制,進程中所有線程都可以對主線程施加控制。

相同點:

進程和線程都有ID/寄存器組、狀態和優先權、信息塊,創建後都可更改自己的屬性,都可與父進程共享資源、都不鞥直接訪問其他無關進程或線程的資源。

線程和進程的關係:

處理多線程就是異步,單線程就是同步
同步是阻塞模式,異步是非阻塞模式

從一定意義上講,進程就是一個應用程序在處理機上的一次執行過程,它是一個動態的概念,而線程是進程中的一部分,進程包含多個線程在運行;程序是一個沒有生命的實體,只有處理器賦予程序生命時,它才能成爲一個活動的實體,
我們稱其爲 進程

多線程的好處
多線程主要是爲了節約CPU時間,發揮利用,根據具體情況而定。線程的運行中需要
使用計算機的內存資源和CPU

進程間相互獨立,同一個進程的各線程間共享。某進程內的線程在其他進程不可見
線程是進程的一個實體,是CPU調度和 分派的基本單位,它是比進程更小的能獨立運行的基本表單位。線程自己基本上不可擁有系統資源

1.進程擁有獨立的堆棧空間和數據段,所以每當啓動一個進程時必須分配給他一個獨立的地址空間,建立衆多的數據表來維護代碼段,堆棧段和數據段,系統開銷大 線程也擁有自己獨立的堆棧空間,但共享代碼段,他們彼此之間使用相同的地址空間,共享大部分數據,比進程更節儉,開銷小,切換速度也比進程快,效率高。 因爲進程是獨立的,所有他的安全性比較高,當一個進程崩潰的時候,不會影響其他進程,而線程是進程的一個不同的執行路徑。一個線程死掉,就等於一個進程死掉

2.通信機制: 因爲進程是相互獨立的,互不干擾,所以進程的通信機制相對會複雜,譬如管道,消息,消息隊列,共享內存,套接字等通信機制,而線程由於共享字段,所以通信會很方便

3.屬於同一進程的所有線程共享該進程的所有資源

4.線程被稱爲輕量級進程,進程有進程控制塊,線程有線程控制塊

5.線程只屬於一個進程,而一個進程至少有一個線程

選擇線程還是進程的取決條件:
1、需要頻繁銷燬和創建的使用線程,進程的創建和銷燬代價太大
2、線程的切換速度比較快,所以需要大量計算或頻繁切換時用線程,還有耗時的操作使用線程,可提高程序的響應速度
3、在堆CPU的使用效率上線程更佔優勢,發展多機分佈時用進程,多核分佈用線程
4、並行操作使用線程
5、需要更安全時,使用進程,速度更快,使用線程  

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