1. 程式人生 > >程序之間的通訊的方式有哪些,他們之間的區別是什麼!或者是憂缺點

程序之間的通訊的方式有哪些,他們之間的區別是什麼!或者是憂缺點

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、隨核心持續。