進(jìn)程間通信(interprocess communication,簡稱IPC)指兩個(gè)進(jìn)程之間的通信。系統(tǒng)中的每一個(gè)進(jìn)程都有各自的地址空間,并且相互獨(dú)立、隔離,每個(gè)進(jìn)程都處于自己的地址空間中,因此相互通信比較難,Linux內(nèi)核提供了多種進(jìn)程間通信的機(jī)制。
同一個(gè)進(jìn)程的不同模塊(譬如不同的函數(shù))之間進(jìn)行通信都是很簡單的,譬如使用全局變量等。
通常情況下,大部分的程序是不要考慮進(jìn)程間通信的,因?yàn)榇蠹宜佑|絕大部分程序都是單進(jìn)程程序(可以有多個(gè)線程),對(duì)于一些復(fù)雜、大型的應(yīng)用程序,則會(huì)根據(jù)實(shí)際需要將其設(shè)計(jì)成多進(jìn)程程序。
進(jìn)程間通信的機(jī)制有哪些?
Linux 內(nèi)核提供了多種 IPC 機(jī)制,基本是從 UNIX 系統(tǒng)繼承而來,而對(duì) UNIX 發(fā)展做出重大貢獻(xiàn)的兩大主力 AT&T的貝爾實(shí)驗(yàn)室及 BSD(加州大學(xué)伯克利分校的伯克利軟件發(fā)布中心)在進(jìn)程間通信方面的側(cè)重點(diǎn)有所不同。
前者對(duì) UNIX 早期的進(jìn)程間通信手段進(jìn)行了系統(tǒng)的改進(jìn)和擴(kuò)充,形成了“System VIPC”,通信進(jìn)程局限在單個(gè)計(jì)算機(jī)內(nèi);后者則跳過了該限制,形成了基于套接字(Socket,也就是網(wǎng)絡(luò))的進(jìn)程間通信機(jī)制。Linux則把兩者繼承了下來,如下如所示:
早期的 UNIX IPC 包括:管道、FIFO、信號(hào);System V IPC 包括:System V 信號(hào)量、System V消隊(duì)列、SystemV 共享內(nèi)存;上圖中還出現(xiàn)了 POSIX IPC,事實(shí)上,較早的 System V IPC 存在著一些不足之處,而 POSIX IPC 則是在 System VIPC 的基礎(chǔ)上進(jìn)行改進(jìn)所形成的,彌補(bǔ)了 System V IPC 的一些不足之處。POSIX IPC 包括:POSIX 信號(hào)量、POSIX消息隊(duì)列、POSIX 共享內(nèi)存。
總結(jié)如下:
UNIX IPC:管道、FIFO、信號(hào);
System V IPC:信號(hào)量、消息隊(duì)列、共享內(nèi)存;
POSIX IPC:信號(hào)量、消息隊(duì)列、共享內(nèi)存;
Socket IPC:基于 Socket 進(jìn)程間通信。
-
通信
+關(guān)注
關(guān)注
18文章
6206瀏覽量
137844 -
Linux
+關(guān)注
關(guān)注
87文章
11511瀏覽量
213865 -
IPC
+關(guān)注
關(guān)注
3文章
366瀏覽量
53200
發(fā)布評(píng)論請(qǐng)先 登錄
Linux下進(jìn)程間通信方式-管道
Linux下進(jìn)程間通信
進(jìn)程間通信
進(jìn)程間通信的分類及機(jī)制中的數(shù)據(jù)結(jié)構(gòu)
怎樣通過匿名管道去實(shí)現(xiàn)進(jìn)程間的通信呢
哪些方式可以實(shí)現(xiàn)Linux系統(tǒng)下的進(jìn)程間通信
進(jìn)程間通信之Linux下進(jìn)程間通信概述
進(jìn)程間與線程間的通信方式

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

如何實(shí)現(xiàn)一套linux進(jìn)程間通信的機(jī)制

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

評(píng)論