按發送路徑來看,可分為直接通信和間接通信。
1. 直接通信
(1)進程必須正確的命名對方
- send (P, message) – 發送信息到進程P
- receive(Q, message) – 從進程 Q接受消息
(2)通信鏈路的屬性
- 自動建立鏈路
- 一條鏈路恰好對應一對通信進程
- 每對進程之間只有一個鏈接存在
- 鏈接可以是單向的,但通常為雙向的
2. 間接通信
(1)通過操作系統維護的消息隊列實現進程間的消息接收和發送
- 每個消息隊列都有一個唯一的標識
- 只有共享了相同消息隊列的進程,才能夠通信
(2)通信鏈路的屬性
- 只有共享了相同消息隊列的進程,才建立連接
- 連接可以是單向或雙向
- 消息隊列可以與多個進程相關聯
- 每對進程可以共享多個消息隊列
(3)通信流程
- 創建一個新的消息隊列
- 通過消息隊列發送和接收消息
- 銷毀消息隊列
3. 進程通信可划分為阻塞(同步)或非阻塞(異步)
(1) 阻塞通信
- 阻塞發送:發送者在發送消息后進入等待,直到接收者成功收到
- 阻塞接收:接收者在請求接收消息后進入等待,直到成功收到一個消息
(2)非阻塞通信
- 非阻塞發送:發送者在消息發送后,可立即進行其他操作
- 非阻塞接收:沒有消息發送時,接收者在請求接收消息后,接收不到任何消息
4. 信號
進程間的軟件中斷通知和處理機制。
5. 管道(間接通信)
進程間基於內存文件的通信機制。
6. 消息隊列(間接通信)
是由操作系統維護的以字節序列為基本單位的間接通信機制。
7. 共享內存(直接通信)
把同一段物理機制映射到多個進程的內存地址空間的通信機制。每個進程的內存地址空間需要明確設置共享內存段,同一個進程的線程共享地址空間。(速度快,但是沒有同步)