管道和訊息佇列的區別


Unix 管道

Unix 管道用於程序間通訊。顧名思義,管道提供了一種單向的資訊流。資料從一端流向另一端。

訊息佇列

訊息佇列允許傳送方程序與其他程序共享訊息。訊息佇列作為訊息的連結列表實現,並存儲在核心中。每個訊息都有一個唯一的訊息佇列識別符號。核心會記錄系統中存在的訊息佇列。

以下是 Unix 管道和訊息佇列之間的一些重要區別。

序號關鍵點管道訊息佇列
1概念管道是 Unix IPC 形式,用於提供單向的資訊流。訊息佇列是系統 VIPC 形式,用於儲存訊息列表。
2建立可以使用 pipe() 函式建立管道,該函式返回兩個檔案描述符,一個用於讀取,另一個用於寫入。可以使用 msgget() 函式建立訊息佇列,該函式返回佇列識別符號。
3方向管道是單向的。訊息佇列是雙向的。
4資料獲取資料可以以 FIFO(先進先出)的方式獲取。資料可以以任何順序獲取。
5優先順序管道中不存在優先順序。訊息可以透過將優先順序編號附加到訊息型別來具有優先順序。
6接收者為了使管道正常工作,傳送方和接收方程序應該存在,以等待寫入和讀取管道中的訊息。在訊息佇列中,寫入程序可以寫入訊息並退出。讀取程序稍後可以讀取訊息。
7永續性如果系統中不存在關聯的接收方/傳送方程序,則管道將從系統中刪除。訊息佇列在系統中保持活動狀態,直到被某個程序顯式刪除。
8訊息大小管道訊息大小最多可達 4096 位元組。訊息佇列訊息大小最多可達 8192 位元組。


更新於: 2020-04-16

3K+ 瀏覽量

啟動你的 職業生涯

透過完成課程獲得認證

開始學習
廣告