程序間通訊方式 分類 區別 優缺點 使用場景

2022-06-26 20:03:15 字數 1952 閱讀 3797

分類

特點具體通訊方式

低階通訊

控制資訊的傳送

訊號高階通訊

與大批資料傳送

管道、訊息佇列、共享記憶體、套接字

通訊方式

介紹區別

優缺點使用場景

管道pipe

兩種限制,

一是半雙工,只能單向傳輸;

二是只能在父子程序間使用.

優:無名管道簡單方便

缺:單項傳輸、只父子程序

只能在具有親緣關係的程序間使用.一般指的是父子關係.管道一般用於兩個不同程序之間的通訊.

流管道雙向傳輸.

只能在父子程序間使用

只能在父子程序間使用

有名管道

單向傳輸;

可以在許多並不相關的程序之間進行通訊.

優點:可以提供給任意關係的程序使用.

缺點:由於其長期存在於系統之中,使用不當容易出錯.所以普通使用者一般不建議使用

允許無親緣關係程序間的通訊

訊號(signal)

由使用者、系統或者程序傳送給目標程序的資訊,以通知目標程序某個狀態的改變或系統異常。

優點:觸發某些行為

缺點:傳遞資訊少

使用者傳遞的資訊較少;用於通知接收程序某個事件已經發生;傳送訊號給程序本身

訊號量(semaphore)

是乙個特殊的變數,它的本質是計數器,訊號量裡面記錄了臨界資源的數目,有多少數目,訊號量的值就為多少,程序對其訪問都是原子操作(pv操作,p:占用資源,v:釋放資源)。

它的作用就是,調協程序對共享資源的訪問,讓乙個臨界區同一時間只有乙個程序在訪問它。

主要作為程序間以及同一程序不同執行緒之間的同步手段

訊號是通知程序產生了某個事件,

訊號量是用來同步程序的

用於多執行緒之間的同步,常與共享記憶體配合使用

訊息佇列 (message)

訊息佇列是訊息的鏈結表,包括posix訊息佇列systemv訊息佇列。有足夠許可權的程序可以向佇列中新增訊息,被賦予讀許可權的程序則可以讀走佇列中的訊息。

允許任意程序通過共享訊息佇列來實現程序間通訊.並由系統呼叫函式來實現訊息傳送和接收之間的同步.從而使得使用者在使用訊息緩衝進行通訊時不再需要考慮同步問題

訊息佇列克服了訊號承載資訊量少,管道只能承載無格式位元組流以及緩衝區大小受限等缺點

優點:不再侷限於父子程序,不再需要考慮同步問題.使用方便

缺點:訊息佇列中資訊的複製需要額外消耗cpu的時間.不適宜於資訊量大或操作頻繁的場合。

訊息佇列克服了訊號傳遞資訊少,管道只能承載無格式位元組流以及緩衝區大小受限等特點.

unix允許不同程序將格式化的資料流以訊息佇列形式傳送給任意程序.

共享記憶體

使得多個程序可以訪問同一塊記憶體空間,是最快的可用ipc形式。是針對其他通訊機制執行效率較低而設計的。

往往與其它通訊機制,如訊號量結合使用,來達到程序間的同步及互斥。

共享記憶體針對訊息緩衝的缺點改而利用記憶體緩衝區直接交換資訊

優點:無須複製,快捷、資訊量大

缺點:1、通過將共享的記憶體緩衝區直接附加到程序的虛擬位址空間中來實現的.因此,這些程序之間的讀寫操作的同步問題作業系統無法實現。必須由各程序利用其他同步工具解決

2、由於記憶體實體存在於計算機系統中.所以只能由處於同乙個計算機系統中的諸程序共享,不方便網路通訊

與其他通訊機制,如訊號量,配合使用,來實現程序間的同步與通訊

套介面(socket)

程序間通訊方式分類

程序間通訊主要包括管道 管道包括三種 系統ipc 包括訊息佇列,訊號,共享記憶體 套接字 socket 管道 簡單 訊號 開銷小 mmap對映 非血緣關係程序間 socket 本地套接字 穩定 1 普通管道 普通管道pipe 通常有兩種限制,一是單工,只能單向傳輸 二是只能在父子或者兄弟程序間使用....

程序間通訊方式有哪些?各自有哪些優缺點?

1 管道管道分為有名管道和無名管道 無名管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用.程序的親緣關係一般指的是父子關係。無明管道一般用於兩個不同程序之間的通訊。當乙個程序建立了乙個管道,並呼叫fork建立自己的乙個子程序後,父程序關閉讀管道端,子程序關閉寫管道端,...

程序通訊的幾種方式及其各自優缺點

socket a 使用socket通訊的方式實現起來簡單,可以使用網際網路域和unix域來實現,使用網際網路域可以實現不同主機之間的進出通訊。b 該方式自身攜帶同步機制,不需要額外的方式來輔助實現同步。c 隨程序持續。共享記憶體 a 最快的一種通訊方式,多個程序可同時訪問同一片記憶體空間,相對其他方...