1、管道和 FIFO
管道是 UNIX 系統(tǒng)上最古老的 IPC 方法,它在 1970 年 UNIX 的第三個(gè)版本上就出現(xiàn)了。把一個(gè)進(jìn)程連接到另一個(gè)進(jìn)程的數(shù)據(jù)流稱為管道,管道被抽象成一個(gè)文件。
管道包括三種:
普通管道 pipe:通常有兩種限制,一是單工,數(shù)據(jù)只能單向傳輸;二是只能在父子或者兄弟進(jìn)程間使用;
流管道 s_pipe:去除了普通管道的第一種限制,為半雙工,可以雙向傳輸;只能在父子或兄弟進(jìn)程間使用;
有名管道 name_pipe(FIFO):去除了普通管道的第二種限制,并且允許在不相關(guān)(不是父子或兄弟關(guān)系)的進(jìn)程間進(jìn)行通訊。
2、信號(hào)
信號(hào)用于通知接收信號(hào)的進(jìn)程有某種事件發(fā)生,所以可用于進(jìn)程間通信;除了用于進(jìn)程間通信之外,進(jìn)程還可以發(fā)送信號(hào)給進(jìn)程本身。
3、消息隊(duì)列
消息隊(duì)列是消息的鏈表,存放在內(nèi)核中并由消息隊(duì)列標(biāo)識(shí)符標(biāo)識(shí),消息隊(duì)列克服了信號(hào)傳遞信息少、管道只能承載無(wú)格式字節(jié)流以及緩沖區(qū)大小受限等缺陷。消息隊(duì)列包括 POSIX 消息隊(duì)列和 System V 消息隊(duì)列。
消息隊(duì)列是 UNIX 下不同進(jìn)程之間實(shí)現(xiàn)共享資源的一種機(jī)制,UNIX 允許不同進(jìn)程將格式化的數(shù)據(jù)流以消息隊(duì)列形式發(fā)送給任意進(jìn)程,有足夠權(quán)限的進(jìn)程可以向隊(duì)列中添加消息,被賦予讀權(quán)限的進(jìn)程則可以讀走隊(duì)列中的消息。
4、信號(hào)量
信號(hào)量是一個(gè)計(jì)數(shù)器,與其它進(jìn)程間通信方式不大相同,它主要用于控制多個(gè)進(jìn)程間或一個(gè)進(jìn)程內(nèi)的多個(gè)線程間對(duì)共享資源的訪問(wèn),相當(dāng)于內(nèi)存中的標(biāo)志,進(jìn)程可以根據(jù)它判定是否能夠訪問(wèn)某些共享資源,同時(shí),進(jìn)程也可以修改該標(biāo)志,除了用于共享資源的訪問(wèn)控制外,還可用于進(jìn)程同步。
它常作為一種鎖機(jī)制,防止某進(jìn)程在訪問(wèn)資源時(shí)其它進(jìn)程也訪問(wèn)該資源,因此,主要作為進(jìn)程間以及同一個(gè)進(jìn)程內(nèi)不同線程之間的同步手段。Linux 提供了一組精心設(shè)計(jì)的信號(hào)量接口來(lái)對(duì)信號(hào)量進(jìn)行操作,它們聲明在頭文件 sys/sem.h 中。
5、共享內(nèi)存
共享內(nèi)存就是映射一段能被其它進(jìn)程所訪問(wèn)的內(nèi)存,這段共享內(nèi)存由一個(gè)進(jìn)程創(chuàng)建,但其它的多個(gè)進(jìn)程都可以訪問(wèn),使得多個(gè)進(jìn)程可以訪問(wèn)同一塊內(nèi)存空間。
共享內(nèi)存是最快的 IPC 方式,它是針對(duì)其它進(jìn)程間通信方式運(yùn)行效率低而專門設(shè)計(jì)的,它往往與其它通信機(jī)制,譬如結(jié)合信號(hào)量來(lái)使用,以實(shí)現(xiàn)進(jìn)程間的同步和通信。
6、套接字(Socket)
Socket 是一種 IPC 方法,是基于網(wǎng)絡(luò)的 IPC 方法,允許位于同一主機(jī)(計(jì)算機(jī))或使用網(wǎng)絡(luò)連接起來(lái)的不同主機(jī)上的應(yīng)用程序之間交換數(shù)據(jù),說(shuō)白了就是網(wǎng)絡(luò)通信。
在一個(gè)典型的客戶端/服務(wù)器場(chǎng)景中,應(yīng)用程序使用 socket 進(jìn)行通信的方式如下:
各個(gè)應(yīng)用程序創(chuàng)建一個(gè) socket。socket 是一個(gè)允許通信的“設(shè)備”,兩個(gè)應(yīng)用程序都需要用到它。
服務(wù)器將自己的 socket 綁定到一個(gè)眾所周知的地址上使得客戶端能夠定位到它的位置。
-
Linux
+關(guān)注
關(guān)注
87文章
11456瀏覽量
212742 -
進(jìn)程間通信
+關(guān)注
關(guān)注
0文章
16瀏覽量
2503
發(fā)布評(píng)論請(qǐng)先 登錄
Linux下進(jìn)程間通信方式-管道
Linux下進(jìn)程間通信
常用的進(jìn)程間通信主要有哪幾種方式
進(jìn)程有幾種狀態(tài)?
抖動(dòng)測(cè)量的幾種方法
關(guān)于實(shí)時(shí)操作系統(tǒng)中任務(wù)間通信的一種方法

進(jìn)程間與線程間的通信方式

使用MQTT作為進(jìn)程間通信的方式

進(jìn)程間通信的機(jī)制有哪些

常見(jiàn)的進(jìn)程間通信方式

進(jìn)程間通信的原理

評(píng)論