進程間的五種通信方式

原文鏈接:https://blog.csdn.net/heihei_100/article/details/80772902

進程間通信(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. 信號量+共享內存通常結合在一起使用,信號量用來同步對共享內存的訪問。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章