天天看點

IPC 方法分類

IPC 方法分類

程序間通信

shell out

  • 被調用程式在執行完畢之前接管使用者的鍵盤和顯示,退出後,調用程式重新控制鍵盤和顯示并繼續運作。
  • 專門程式通常有檔案系統與父程序進行通信,方法是在指定位置讀取或修改檔案;

    編輯器或郵件器的

    shellout

    就是這樣工作的。

管道、重定向和過濾器

管道

  • 單向
  • 通常有兩個

    I/O

    資料流可用:标準輸入和标準輸出。

Unix shell 支援重定向操作

ls > foo
           

ls

指令的輸出寫入到

foo

檔案内。

wc < foo
           

foo

内容作為

wc

檔案的輸入。

ps | more
           

ps

輸出将被分頁,根據顯示器尺寸顯示。

包裝器

包裝器常常源于需要制定參數來修改被調用程式的行為。

Bernstein 鍊

和管道類似,不過每個繼發階段的程式取代了前一階段的程式,并不是與之并行。

  • 類似于流程圖,層層傳遞的流程。
  • 不能重回上一個流程。

從程序

主從程序通過内部處理狀态處理他們之間的協定以避免發生死鎖和競争。

  • 比 shellout 更複雜更難以調試
  • 互動的條件:
    • 兩者之間涉及的協定完全無足輕重;
    • 從程序是為應用協定進行通訊而設計的。
    • 允許主程序支援指令行開關或者環境變量的方式來允許調用則設定自己的從程序指令;
    • 一定程度上對從程序進行監控;
    以上這些都将有利于調試,便利于開發。

對等程序間通信

臨時檔案

缺點:

  • 臨時檔案被删除前,程序被中斷,檔案将成為遺留垃圾資料;
  • 如果程式中的多個執行個體使用同一檔案名稱作為臨時檔案名,将導緻沖突。
  • 安全性:如果攻擊程式知道臨時檔案要寫入的位置,可以覆寫整個檔案,可能讀取生産者的程序資料,或者通過檔案中插入修改,造假資料欺騙消費者程序。

優點:

  • 容易建立
  • 不容易産生死鎖和競争

信号

  • 一個程序向另一個程序發送信号(Unix 的信号是一種軟中斷形式,每個信号都對接受程序産生預設作用【通常是殺掉這個程序】)

套接字

通過套接字通信的兩個程式通常都存在雙向位元組流。

  • 位元組流既是按序的,又是可靠的。
  • 套接字描述符一旦獲得,行為基本上和檔案描述符一樣。

要優雅地使用套接字,在 Unix 傳統中,首先得設計這些套接字之間使用的應用協定--即一套請求和相應,能夠簡潔地表達程式通訊的語義。

執行個體:PostgreSQL(DB) Freeciv

共享記憶體

要求生産者和消費者程式必須在同一硬體上。

使用共享記憶體和信号量功能可避免通過網絡棧複制資料的開銷。