線程和進程的區別聯繫

線程和進程的區別聯繫:
1,進程:子進程是父進程的複製品。子進程獲得父進程數據空間、堆和棧的複製品。

2,線程:相對於進程而言,線程是一個更加接近與執行體的概念,它可以與同進程的其他線程共享數據,但擁有自己的棧空間,擁有獨立的執行序列。 
兩者都可以提高程序的併發度,提高程序運行效率和響應時間。

線程和進程在使用上各有優缺點:線程執行開銷小,但不利於資源管理和保護;而進程正相反。同時,線程適合於在SMP機器上運行,而進程則可以跨機器遷移。
根本區別就一點:用多進程處理技術,每個進程有自己的地址空間(address space),線程則共享地址空間。所有其它區別都是由此而來的: 
1、速度:線程產生的速度快,線程間的通訊快、切換快等,因爲他們在同一個地址空間內。 
2、資源利用率:線程的資源利用率比較好也是因爲他們在同一個地址空間內。 
3、同步問題:線程使用公共變量/內存時需要使用同步機制還是因爲他們在同一個地址空間內
 

1.定義
【進程】是具有一定獨立功能的程序關於某個數據集合上的一次運行活動,進程是系統進行資源分配和調度的一個獨立單位.每一個進程都有一個自己的地址空間,即進程空間或(虛空間)。大小隻與處理機的位數有關,16位處理機的空間大小爲216,而 32 位處理機的進程空間大小爲 232 。進程至少有 5 種基本狀態,它們是:初始態,執行態,等待狀態,就緒狀態,終止狀態。單機系統中進程通信有 4 種形式:主從式,會話式,消息或郵箱機制,共享存儲區方式,管道(共享大量內存中的數據)。
 
【線程】是進程的一個實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位.線程自己基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(如程序計數器,一組寄存器和棧,非共享),但是它可與同屬一個進程的其他的線程共享進程所擁有的全部資源.
 
2.區別
 
1) 包含關係:一個程序至少有一個進程,一個進程至少有一個線程.
2) 內存共享:進程在執行過程中擁有獨立的內存單元(一個進程崩潰後,在保護模式下不會對其它進程產生影響);而多個線程共享進程提供的內存(擁有自己的私有棧空間只是作爲運行需要的極少內存),從而極大地提高了程序的運行效率,但一個線程死掉就等於整個進程死掉。所以多進程的程序要比多線程的程序健壯。
3) 執行過程:進程獨立執行;線程不能夠獨立執行,必須依存在應用程序中,由應用程序提供多個線程執行控制。
4) 從邏輯角度來看,多線程的意義在於一個應用程序中,有多個執行部分可以同時執行。但操作系統並沒有將多個線程看做多個獨立的應用,來實現進程的調度和管理以及資源分配。這就是進程和線程的重要區別。
 
3.進程間通信
進程的用戶空間是互相獨立的,一般而言是不能互相訪問的,唯一的例外是共享內存區。但是,系統空間卻是“公共場所”,所以內核顯然可以提供這樣的條件。除此以外,那就是雙方都可以訪問外設了。在這個意義上,兩個進程當然也可以通過磁盤上的普通文件交換信息,或者通過“註冊表”或其它數據庫中的某些表項和記錄交換信息。廣義上這也是進程間通信的手段,但是一般都不把這算作“進程間通信”。因爲那些通信手段的效率太低了,而人們對進程間通信的要求是要有一定的實時性。 

  進程間通信主要包括管道, 系統IPC(包括消息隊列,信號量,共享存儲), SOCKET.

  管道包括三種:1)普通管道PIPE, 通常有種限制,一是半雙工,只能單向傳輸;二是只能在父子進程間使用. 2)流管道s_pipe: 去除了第一種限制,可以雙向傳輸. 3)命名管道:name_pipe, 去除了第二種限制,可以在許多並不相關的進程之間進行通訊.

  系統IPC的三種方式類同,都是使用了內核裏的標識符來識別. 
# 管道( pipe ):管道是一種半雙工的通信方式,數據只能單向流動,而且只能在具有親緣關係的進程間使用。進程的親緣關係通常是指父子進程關係。
# 有名管道 (named pipe) : 有名管道也是半雙工的通信方式,但是它允許無親緣關係進程間的通信。
# 信號量( semophore ) : 信號量是一個計數器,可以用來控制多個進程對共享資源的訪問。它常作爲一種鎖機制,防止某進程正在訪問共享資源時,其他進程也訪問該資源。因此,主要作爲進程間以及同一進程內不同線程之間的同步手段。
# 消息隊列( message queue ) : 消息隊列是由消息的鏈表,存放在內核中並由消息隊列標識符標識。消息隊列克服了信號傳遞信息少、管道只能承載無格式字節流以及緩衝區大小受限等缺點。
# 信號 ( sinal ) : 信號是一種比較複雜的通信方式,用於通知接收進程某個事件已經發生。
# 共享內存( shared memory ) :共享內存就是映射一段能被其他進程所訪問的內存,這段共享內存由一個進程創建,但多個進程都可以訪問。共享內存是最快的 IPC 方式,它是針對其他進程間通信方式運行效率低而專門設計的(共享大量內存中的數據)。它往往與其他通信機制,如信號倆配合使用,來實現進程間的同步和通信。
# 套接字( socket ) : 套解口也是一種進程間通信機制,與其他通信機制不同的是,它可用於不同及其間的進程通信。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章