Linux c==幾種進程間通信方式的特點對比

linux上面的IPC大多都是從UNIX上面繼承而來。 
最初Unix IPC包括:管道、FIFO、信號。System V IPC包括:System V消息隊列、System V信號燈、System V共享內存區。由於Unix版本的多樣性,電子電氣工程協會(IEEE)開發了一個獨立的Unix標準,這個新的ANSI Unix標準被稱爲計算機環境的可移植性操作系統界面(PSOIX)。現有大部分Unix和流行版本都是遵循POSIX標準的,而Linux從一開始就遵循POSIX標準。Posix IPC包括: Posix消息隊列、Posix信號燈、Posix共享內存區。 所以目前linux上面支持的IPC主要包括四類: 
1. UNIX早期IPC:管道、FIFO、信號; 
2. system V IPC:System V消息隊列、System V信號燈、System V共享內存區; 
3. Posix IPC: Posix消息隊列、Posix信號燈、Posix共享內存區; 
4. 基於socket的IPC;

    我們這一系列沒有講述信號燈相關內容,是因爲信號燈是進程間以及同一進程不同線程之間的一種同步方式,我們這一系列把精力主要放在進程之間信息的交互上面,而同步與互斥的內容放在另一個系列,這樣更便於知識的細化歸類,各個擊破。其實同步與互斥是進程間通信的一個很重要的內容,所以我們會立即在下一個系列詳細講解同步與互斥的內容。

下面分析一下我們這一系列文章各種IPC的特點:

  1. socket 
    a、使用socket通信的方式實現起來簡單,可以使用因特網域和UNIX域來實現,使用因特網域可以實現不同主機之間的進出通信。 
    b、該方式自身攜帶同步機制,不需要額外的方式來輔助實現同步。 
    c、隨進程持續。
  2. 共享內存 
    a、最快的一種通信方式,多個進程可同時訪問同一片內存空間,相對其他方式來說具有更少的數據拷貝,效率較高。 
    b、需要結合信號燈或其他方式來實現多個進程間同步,自身不具備同步機制。 
    c、隨內核持續,相比於隨進程持續生命力更強。
  3. 管道 
    a、較早的一種通信方式,缺點明顯:只能用於有親緣關係進程之間的通信;只支持單向數據流,如果要雙向通信需要多創建一個管道來實現。 
    b、自身具備同步機制。 
    c、隨進程持續。
  4. FIFO 
    a、是有名管道,所以支持沒有親緣關係的進程通信。和共享內存類似,提供一個路徑名字將各個無親緣關係的進程關聯起來。但是也需要創建兩個描述符來實現雙向通信。 
    b、自身具備同步機制。 
    c、隨進程持續。
  5. 信號 
    a、這種通信可攜帶的信息極少。不適合需要經常攜帶數據的通信。 
    b、不具備同步機制,類似於中斷,什麼時候產生信號,進程是不知道的。
  6. 消息隊列 
    a、與共享內存和FIFO類似,使用一個路徑名來實現各個無親緣關係進程之間的通信。消息隊列相比於其他方式有很多優點:它提供有格式的字節流,減少了開發人員的工作量;消息具有類型(system V)或優先級(posix)。其他方式都沒有這些優點。 
    b、具備同步機制。 
    c、隨內核持續。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章