程序間的通訊方式型別及其比較

2022-07-29 00:57:10 字數 1509 閱讀 2390

管道( pipe )

訊號量( semophore )

訊息佇列( message queue )

訊號 ( singal )

共享記憶體( shared memory )

套接字( socket )型別

無連線可靠

流控制記錄訊息型別

優先順序普通pipeny

yn流pipeny

yn命名pipe(fifo)ny

yn訊息佇列ny

yy訊號量nyy

yunix流socketny

yyunix資料報socketny

yn

注:無連線: 指無需呼叫某種形式的open,就有傳送訊息的能力流控制:

假設系統資源短缺或者不能接收很多其它訊息,則傳送程序能進行流量控制.

各種通訊方式的比較和優缺點

特點:

管道:速度慢。容量有限,僅僅有父子程序能通訊.

fifo:不論什麼程序間都能通訊,但速度慢.

訊號量:不能傳遞復雜訊息,僅僅能用來同步.

共享記憶體區:能夠非常easy控制容量,速度快,但要保持同步,比方乙個程序在寫的時候。還有乙個程序要注意讀寫的問題,相當於執行緒中的執行緒安全。當然。共享記憶體區相同能夠用作執行緒間通訊,只是沒這個必要,執行緒間本來就已經共享了同一程序內的一塊記憶體.

分析:

假設使用者傳遞的資訊較少或是須要通過訊號來觸發某些行為.前文提到的軟中斷訊號機制不失為一種簡捷有效的程序間通訊方式.

但若是程序間要求傳遞的資訊量比較大或者程序間存在交換資料的要求,那就須要考慮別的通訊方式了。

無名管道簡單方便.但侷限於單向通訊的工作方式.而且僅僅能在建立它的程序及其子孫程序之間實現管道的共享:

有名管道儘管能夠提供給隨意關係的程序使用.可是因為其長期存在於系統之中。使用不當容易出錯.所以普通使用者一般不建議使用。

訊息緩衝能夠不再侷限於父子程序。而同意隨意程序通過共享訊息佇列來實現程序間通訊,並由系統呼叫函式來實現訊息傳送和接收之間的同步,從而使得使用者在使用訊息緩衝進行通訊時不再須要考慮同步問題,使用方便。可是資訊的複製須要額外消耗cpu的時間,不適宜於資訊量大或操作頻繁的場合。

共享記憶體針對訊息緩衝的缺點改而利用記憶體緩衝區直接交換資訊,無須複製。快捷、資訊量大是其長處。可是共享記憶體的通訊方式是通過將共享的記憶體緩衝區直接附加到程序的虛擬位址空間中來實現的,因此。這些程序之間的讀寫操作的同步問題作業系統無法實現。必須由各程序利用其它同步工具解決。另外,因為記憶體實體存在於計算機系統中。所以僅僅能由處於同乙個計算機系統中的諸程序共享。

共享記憶體塊提供了在隨意數量的程序之間進行高效雙向通訊的機制。每乙個使用者都能夠讀取寫入資料。可是全部程式之間必須達成並遵守一定的協議,以防止諸如在讀取資訊之前覆寫記憶體空間等競爭狀態的出現。不幸的是,linux無法嚴格保證提供對共享記憶體塊的獨佔訪問,甚至在通過使用ipc_private建立新的共享記憶體塊的時候也不能保證訪問的獨占性。同一時候,多個使用共享記憶體塊的程序之間必須協調使用同乙個鍵值。

程序間通訊各方式間比較

管道 pipe 管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。有名管道 named pipe 有名管道也是半雙工的通訊方式,但是它允許無親緣關係程序間的通訊。訊號量 semophore 訊號量是乙個計數器,可以用來控制多個程序對...

程序間的通訊方式,執行緒間的通訊方式 程序

當時做筆記的時候 忘了在 看到的了,有時間我再研究研究 管道 pipe 管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。有名管道 namedpipe 有名管道也是半雙工的通訊方式,但是它允許無親緣關係程序間的通訊。訊號量 semo...

程序間通訊的方式?執行緒間通訊的方式?

管道 命名管道 訊號量 訊息佇列 訊號及共享記憶體只適用於本地程序間通訊,套接字則可用於遠端通訊,因而一般用於網路程式設計。部分概念解釋 匿名管道是在快取中開闢的輸出和輸入檔案流的空間,只能用於父子關係的程序之間。因為父子程序的輸入和輸出檔案描述符是一致的。命名管道是一種實際存在的fifo檔案,稱作...