1. 程式人生 > >面試題2:程序間常用的通訊方式有哪些?

面試題2:程序間常用的通訊方式有哪些?

程序間通訊(IPC,InterProcess Communication)是指在不同程序之間傳播或交換資訊。

IPC的方式通常有管道(包括無名管道和命名管道)、訊息佇列、訊號量、共享儲存、Socket、Streams等。其中 Socket和Streams支援不同主機上的兩個程序IPC。

一、管道

管道,通常指無名管道,是 UNIX 系統IPC最古老的形式。

1、特點:

  1. 它是半雙工的(即資料只能在一個方向上流動),具有固定的讀端和寫端。

  2. 它只能用於具有親緣關係的程序之間的通訊(也是父子程序或者兄弟程序之間)。

  3. 它可以看成是一種特殊的檔案,對於它的讀寫也可以使用普通的read、write 等函式。但是它不是普通的檔案,並不屬於其他任何檔案系統,並且只存在於記憶體中。

二、FIFO

FIFO,也稱為命名管道,它是一種檔案型別。

1、特點

  1. FIFO可以在無關的程序之間交換資料,與無名管道不同。

  2. FIFO有路徑名與之相關聯,它以一種特殊裝置檔案形式存在於檔案系統中。

三、訊息佇列

訊息佇列,是訊息的連結表,存放在核心中。一個訊息佇列由一個識別符號(即佇列ID)來標識。

1、特點

  1. 訊息佇列是面向記錄的,其中的訊息具有特定的格式以及特定的優先順序。

  2. 訊息佇列獨立於傳送與接收程序。程序終止時,訊息佇列及其內容並不會被刪除。

  3. 訊息佇列可以實現訊息的隨機查詢,訊息不一定要以先進先出的次序讀取,也可以按訊息的型別讀取。

四、訊號量

訊號量(semaphore)與已經介紹過的 IPC 結構不同,它是一個計數器。訊號量用於實現程序間的互斥與同步,而不是用於儲存程序間通訊資料。

1、特點

  1. 訊號量用於程序間同步,若要在程序間傳遞資料需要結合共享記憶體。

  2. 訊號量基於作業系統的 PV 操作,程式對訊號量的操作都是原子操作。

  3. 每次對訊號量的 PV 操作不僅限於對訊號量值加 1 或減 1,而且可以加減任意正整數。

  4. 支援訊號量組。

五、共享記憶體

共享記憶體(Shared Memory),指兩個或多個程序共享一個給定的儲存區。

1、特點

  1. 共享記憶體是最快的一種 IPC,因為程序是直接對記憶體進行存取。

  2. 因為多個程序可以同時操作,所以需要進行同步。

  3. 訊號量+共享記憶體通常結合在一起使用,訊號量用來同步對共享記憶體的訪問。