Linux 的 進程/線程 通訊方式總結

linux系統中的進程通訊方式主要如下幾種: html

PIPE(FIFO) java

消息隊列 linux

信號量(Semaphore) 網絡

共享存儲 數據結構

SOCKET 多線程

同一主機上的進程通訊方式 併發

   * UNIX進程間通訊方式: 包括管道(PIPE), 有名管道(FIFO), 和信號(Signal) 測試

   * System V進程通訊方式:包括信號量(Semaphore), 消息隊列(Message Queue), 和共享內存(Shared Memory) spa

網絡主機間的進程通訊方式 .net

   * RPC: Remote Procedure Call 遠程過程調用

   * Socket: 當前最流行的網絡通訊方式, 基於TCP/IP協議的通訊方式.

 

各自的特色:

  • 管道(PIPE):管道是一種半雙工的通訊方式,數據只能單向流動,並且只能在具備親緣關係(父子進程)的進程間使用。另外管道傳送的是無格式的字節流,而且管道緩衝區的大小是有限的(管道緩衝區存在於內存中,在管道建立時,爲緩衝區分配一個頁面大小)。
  • 有名管道 (FIFO): 有名管道也是半雙工的通訊方式,可是它容許無親緣關係進程間的通訊。
  • 信號(Signal): 信號是一種比較複雜的通訊方式,用於通知接收進程某個事件已經發生。
  • 信號量(Semaphore):信號量是一個計數器,能夠用來控制多個進程對共享資源的訪問。它常做爲一種鎖機制,防止某進程正在訪問共享資源時,其餘進程也訪問該資源。所以,主要做爲進程間以及同一進程內不一樣線程之間的同步手段。
  • 消息隊列(Message Queue):消息隊列是由消息的鏈表,存放在內核中並由消息隊列標識符標識。消息隊列克服了信號傳遞信息少、管道只能承載無格式字節流以及緩衝區大小受限等缺點。
  • 共享內存(Shared Memory ):共享內存就是映射一段能被其餘進程所訪問的內存,這段共享內存由一個進程建立,但多個進程均可以訪問。共享內存是最快的 IPC 方式,它是針對其餘進程間通訊方式運行效率低而專門設計的。它每每與其餘通訊機制,如信號量,配合使用,來實現進程間的同步和通訊。
  • 套接字(Socket): 套解口也是一種進程間通訊機制,與其餘通訊機制不一樣的是,它可用於不一樣主機間的進程通訊。

 

Linux系統中的線程通訊方式主要如下幾種:

*  鎖機制:包括互斥鎖、條件變量、讀寫鎖

   互斥鎖提供了以排他方式防止數據結構被併發修改的方法。

   使用條件變量能夠以原子的方式阻塞進程,直到某個特定條件爲真爲止。對條件的測試是在互斥鎖的保護下進行的。條件變量始終與互斥鎖一塊兒使用。

   讀寫鎖容許多個線程同時讀共享數據,而對寫操做是互斥的。

*  信號量機制(Semaphore):包括無名線程信號量和命名線程信號量

*  信號機制(Signal):相似進程間的信號處理

 

線程間的通訊目的主要是用於線程同步。因此線程沒有像進程通訊中的用於數據交換的通訊機制。

在java中咱們實現多線程間通訊則主要採用"共享變量"和"管道流"這兩種方法。

-------------------------------------------------------------

附:java多線程通訊方法

http://my.oschina.net/u/248570/blog/53226

http://www.cnblogs.com/vamei/archive/2012/10/10/2715398.html

相關文章
相關標籤/搜索