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