IPC,全稱是InterProcess Communication。不同進(jìn)程之間可以相互通信、交換數(shù)據(jù)。進(jìn)程之間通信方式有:管道(包括無名管道和命名管道)、消息隊(duì)列、信號(hào)量、共享內(nèi)存、Socket、Streams。
1、管道:管道又分無名管道和有名管道,無名管道是單向的,只允許單向通信。如果需要雙向通信,就需要開啟兩個(gè)單向管道。有名管道是在文件系統(tǒng)目錄中存在一個(gè)管道文件。管道文件僅僅是文件系統(tǒng)中的標(biāo)示,并不在磁盤上占據(jù)空間。在使用時(shí),在內(nèi)存上開辟空間,作為兩個(gè)進(jìn)程數(shù)據(jù)交互的通道。
2、消息隊(duì)列:消息隊(duì)列是由消息的鏈表存放在內(nèi)核中并由消息隊(duì)列標(biāo)識(shí)符標(biāo)識(shí)。消息隊(duì)列克服了信號(hào)傳遞信息少、管道只能承載無格式字節(jié)流以及緩沖區(qū)大小受限等缺點(diǎn)。
3、信號(hào)量:信號(hào)量是一個(gè)計(jì)數(shù)器,可以用來控制多個(gè)進(jìn)程對(duì)共享資源的訪問。它常作為一種鎖機(jī)制,防止某進(jìn)程正在訪問共享資源時(shí),其他進(jìn)程也訪問該資源。因此,主要作為進(jìn)程間以及同一進(jìn)程內(nèi)不同線程之間的同步手段。
4、共享內(nèi)存:共享內(nèi)存就是映射一段能被其他進(jìn)程所訪問的內(nèi)存,這段共享內(nèi)存由一個(gè)進(jìn)程創(chuàng)建,但多個(gè)進(jìn)程都可以訪問。共享內(nèi)存是最快的 IPC 方式,它是針對(duì)其他進(jìn)程間通信方式運(yùn)行效率低而專門設(shè)計(jì)的。它往往與其他通信機(jī)制,如信號(hào)量,配合使用,來實(shí)現(xiàn)進(jìn)程間的同步和通信。
5、Socket 也是一種進(jìn)程間通信機(jī)制,與其他通信機(jī)制不同的是,它可用于不同及其間的進(jìn)程通信。