程序間通訊方式剖析

2021-08-28 18:01:01 字數 1373 閱讀 1990

1)管道:無名管道和有名管道

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

有名管道也是一種半雙工的通訊方式,但是它允許無親緣關係程序間的通訊。

無名管道:

優點:簡單方便;

缺點:1)侷限於單向通訊

2)只能建立在它的程序以及其有親緣關係的程序之間;

3)緩衝區有限;

有名管道:

優點:可以實現任意關係的程序間的通訊;

缺點:1)長期存於系統中,使用不當容易出錯;

2)緩衝區有限

2)訊號量

訊號量是乙個計數器,可以用來控制多個執行緒對共享資源的訪問.,它不是用於交換大批資料,而用於多執行緒之間的同步.它常作為一種鎖機制,防止某程序在訪問資源時其它程序也訪問該資源.因此,主要作為程序間以及同乙個程序內不同執行緒之間的同步手段.

優點:可以同步程序;

缺點:訊號量有限

3)訊號

訊號是一種比較複雜的通訊方式,用於通知接收程序某個事件已經發生.

4)訊息佇列

訊息佇列是訊息的鍊錶,存放在核心中並由訊息佇列識別符號標識,訊息佇列克服了訊號傳遞資訊少,管道只能承載無格式位元組流以及緩衝區大小受限等特點。訊息佇列是unix下不同程序之間可實現共享資源的一種機制,unix允許不同程序將格式化的資料流以訊息佇列形式傳送給任意程序。對訊息佇列具有操作許可權的程序都可以使用msget完成對訊息佇列的操作控制.通過使用訊息型別,程序可以按任何順序讀資訊,或為訊息安排優先順序順序.

優點:可以實現任意程序間的通訊,並通過系統呼叫函式來實現訊息傳送和接收之間的同步,無需考慮同步問題,方便;

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

5)共享記憶體

共享記憶體就是對映一段能被其他程序所訪問的記憶體,這段共享記憶體由乙個程序建立,但多個程序都可以訪問。共享記憶體是最快的ipc(程序間通訊)方式,它是針對其它程序間通訊方式執行效率低而專門設計的。它往往與其他通訊機制,如訊號量,配合使用,來實現程序間的同步與通訊。

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

2 )  利用記憶體緩衝區直接交換資訊,記憶體的實體存在於計算機中,只能同乙個計算機系統中的諸多程序共享,不方便網路通訊

6)套接字:可用於不同及其間的程序通訊

優點:1)傳輸資料為位元組級,傳輸資料可自定義,資料量小效率高;

2)傳輸資料時間短,效能高;

3) 適合於客戶端和伺服器端之間資訊實時互動;

4) 可以加密,資料安全性強

缺點:需對傳輸的資料進行解析,轉化成應用級的資料

IPC 程序間通訊 剖析

程序之間需要進行同步和資料交換 程序都要依靠核心來實現彼此之間的同步以及通訊。linux 核心 第十九章 程序通訊 第一段最後一句。每個程序各自有不同的使用者位址空間,任何乙個程序的全域性變數,在另乙個程序中都看不到,所以程序之間要交換資料必須通過核心。程序1把資料從使用者空間拷貝到核心緩衝區,程序...

程序間通訊方式

謝謝作者 用於程序間通訊 ipc 的四種不同技術 共享記憶體,臨界區,管道,訊息 1.訊息傳遞 管道,fifo,posix和system v訊息佇列 2.同步 互斥鎖,條件變數,讀寫鎖,檔案和記錄鎖,posix和system v訊號燈 3.共享記憶體區 匿名共享記憶體區,有名posix共享記憶體區,...

程序間通訊方式

遇到一考題,讓寫出程序間的通訊方式,突然給忘了,只想起管道和共享記憶體以及套接字。現在總結一下程序間的通訊方式以及他們之間的區別 1 管道 pipe 管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。2 有名管道 named pip...