1. 程式人生 > >程序通訊概念和程序通訊方式

程序通訊概念和程序通訊方式

程序通訊(IPC,Inter-Porcess Communcation)是程序進行通訊和同步的機制。

IPC提供兩個基本操作:

  1. 傳送(send message)
  2. 接收(receive message)

程序通訊流程:

  • 在通訊程序之間建立通訊鏈路
  • 通過send/receive交換資訊

程序通訊方式:

這裡寫圖片描述

直接通訊:
程序必須正確命名對方,比如send(p,message)向p傳送資訊,receive(q,message)從q中接收資訊
通訊鏈路有如下屬性:自動建立連線;一條鏈路恰好對應一對通訊程序;每對程序之間只有一個連結存在;鏈路可以是單向的,但是通常為雙向的

間接通訊:
通過OS維護的訊息佇列實現程序之間的通訊(接收發送資訊)
每個訊息佇列都有一個唯一標識,只有共享了相同訊息佇列的程序才能夠通訊
通訊鏈路有如下屬性:只有共享了相同訊息佇列的程序才能建立連線,比如send(a,message)向訊息佇列a傳送資訊,receive(a,message)從訊息佇列a中接收資訊 ;連線單向或者雙向;訊息佇列可以與多個程序相互關聯;每個程序共享多個訊息佇列(也就是程序和訊息佇列是多對多的關係)

阻塞通訊(同步)與非阻塞通訊(非同步)

同步通訊:

阻塞傳送:傳送者傳送訊息後進入等待(阻塞)直到接受者成功接受
阻塞接收:接收者請求接收資訊後等待(阻塞)直到成功接受一條訊息

非同步通訊:

非阻塞傳送:傳送者傳送訊息後,可立即進行其他操作
非阻塞接收:接收者請求接收資訊後,如果沒有訊息傳送就接收不到資訊,不需要等待

通訊鏈路緩衝:

  1. 0容量:傳送方必須等待接受方
  2. 有限容量:緩衝佇列滿,傳送方必須等待
  3. 無限容量:傳送方不需要等待

上面是關於IPC通訊的基本概念,下面我們看一看一些常見的程序通訊方式。

MOOC講了四種程序通訊方式:

訊號,管道, 訊息佇列, 共享記憶體,由於都是基本概念,我偷個懶直接複製下來了:

訊號:

這裡寫圖片描述

管道:

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

訊息佇列:

這裡寫圖片描述

這裡寫圖片描述

共享記憶體:

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述