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