線程和進程的通訊方式以及區別

近日想總結下進程間,線程間的通訊方式,在網上搜索了下,感受寫的很好,照搬過來,當作加深記憶。
幾種進程間的通訊方式
(1) 管道(pipe):管道是一種半雙工的通訊方式,數據只能單向流動,並且只能在具備血緣關係的進程間使用。進程的血緣關係一般指父子進程關係。
(2)有名管道(named pipe):有名管道也是半雙工的通訊方式,可是它容許無親緣關係進程間通訊。
(3)信號量(semophore):信號量是一個計數器,能夠用來控制多個進程對共享資源的訪問。它一般做爲一種鎖機制,防止某進程正在訪問共享資源時,其餘進程也訪問該資源。所以,主要做爲進程間以及同一進程內不一樣線程之間的同步手段。
(4)消息隊列(message queue):消息隊列是由消息組成的鏈表,存放在內核中 並由消息隊列標識符標識。消息隊列克服了信號傳遞信息少,管道只能承載無格式字節流以及緩衝區大小受限等缺點。
(5)信號(signal):信號是一種比較複雜的通訊方式,用於通知接收進程某一事件已經發生。
(6)共享內存(shared memory):共享內存就是映射一段能被其餘進程所訪問的內存,這段共享內存由一個進程建立,但多個進程均可以訪問,共享內存是最快的IPC方式,它是針對其餘進程間的通訊方式運行效率低而專門設計的。它每每與其餘通訊機制,如信號量配合使用,來實現進程間的同步和通訊。
(7)套接字(socket):套接口也是一種進程間的通訊機制,與其餘通訊機制不一樣的是它能夠用於不一樣及其間的進程通訊。
幾種線程間的通訊機制
一、鎖機制
     1.1 互斥鎖:提供了以排它方式阻止數據結構被併發修改的方法。
     1.2 讀寫鎖:容許多個線程同時讀共享數據,而對寫操做互斥。
     1.3 條件變量:能夠以原子的方式阻塞進程,直到某個特定條件爲真爲止。對條件測試是在互斥鎖的保護下進行的。條件變量始終與互斥鎖一塊兒使用。
二、信號量機制:包括無名線程信號量與有名線程信號量
三、信號機制:相似於進程間的信號處理。
線程間通訊的主要目的是用於線程同步,因此線程沒有象進程通訊中用於數據交換的通訊機制。數據結構

進程和線程的區別?
定義:
進程是具備必定獨立功能的程序關於某個數據集合上的一次運行活動,進程是系統進行資源分配和調度的一個獨立單位.多線程

線程是進程的一個實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位.線程本身基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(如程序計數器,一組寄存器和棧),可是它可與同屬一個進程的其餘的線程共享進程所擁有的所有資源.併發

.關係
一個線程能夠建立和撤銷另外一個線程;同一個進程中的多個線程之間能夠併發執行.
相對進程而言,線程是一個更加接近於執行體的概念,它能夠與同進程中的其餘線程共享數據,但擁有本身的棧空間,擁有獨立的執行序列。socket

3.區別
進程和線程的主要差異在於它們是不一樣的操做系統資源管理方式。進程有獨立的地址空間,一個進程崩潰後,在保護模式下不會對其它進程產生影響,而線程只是一個進程中的不一樣執行路徑。線程有本身的堆棧和局部變量,但線程之間沒有單獨的地址空間,一個線程死掉就等於整個進程死掉,因此多進程的程序要比多線程的程序健壯,但在進程切換時,耗費資源較大,效率要差一些。但對於一些要求同時進行而且又要共享某些變量的併發操做,只能用線程,不能用進程。
1) 簡而言之,一個程序至少有一個進程,一個進程至少有一個線程.
2) 線程的劃分尺度小於進程,使得多線程程序的併發性高。
3) 另外,進程在執行過程當中擁有獨立的內存單元,而多個線程共享內存,從而極大地提升了程序的運行效率。
4) 線程在執行過程當中與進程仍是有區別的。每一個獨立的線程有一個程序運行的入口、順序執行序列和程序的出口。可是線程不可以獨立執行,必須依存在應用程序中,由應用程序提供多個線程執行控制。
5) 從邏輯角度來看,多線程的意義在於一個應用程序中,有多個執行部分能夠同時執行。但操做系統並無將多個線程看作多個獨立的應用,來實現進程的調度和管理以及資源分配。這就是進程和線程的重要區別。
4.優缺點
線程和進程在使用上各有優缺點:線程執行開銷小,但不利於資源的管理和保護;而進程正相反。同時,線程適合於在SMP機器上運行,而進程則能夠跨機器遷移測試

相關文章
相關標籤/搜索