五种进程通信方式
管道
它是半雙工的(即數據只能在一個方向上流動),具有固定的讀端和寫端。
它只能用于具有親緣關系的進程之間的通信(也是父子進程或者兄弟進程之間)。
它可以看成是一種特殊的文件,對于它的讀寫也可以使用普通的read、write 等函數。但是它不是普通的文件,并不屬于其他任何文件系統,并且只存在于內存中。
命名管道
FIFO可以在無關的進程之間交換數據,與無名管道不同。
FIFO有路徑名與之相關聯,它以一種特殊設備文件形式存在于文件系統中。
消息隊列
消息隊列是面向記錄的,其中的消息具有特定的格式以及特定的優先級。
消息隊列獨立于發送與接收進程。進程終止時,消息隊列及其內容并不會被刪除。
消息隊列可以實現消息的隨機查詢,消息不一定要以先進先出的次序讀取,也可以按消息的類型讀取。
信號量
信號量用于進程間同步,若要在進程間傳遞數據需要結合共享內存。
信號量基于操作系統的 PV 操作,程序對信號量的操作都是原子操作。
每次對信號量的 PV 操作不僅限于對信號量值加 1 或減 1,而且可以加減任意正整數。
支持信號量組。
共享內存
共享內存是最快的一種 IPC,因為進程是直接對內存進行存取。
因為多個進程可以同時操作,所以需要進行同步。
信號量+共享內存通常結合在一起使用,信號量用來同步對共享內存的訪問。
總結