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