首頁  >  文章  >  運維  >  linux進程間的通訊方式有哪三種

linux進程間的通訊方式有哪三種

青灯夜游
青灯夜游原創
2021-07-23 16:46:407080瀏覽

linux進程間通訊的3種方式:1、管道通信,發送訊息的進程稱為寫入進程,接收訊息的進程稱為讀取進程。 2.訊息緩衝通信,以訊息緩衝區為中間介質,通訊雙方的傳送及接收操作均以訊息為單位。 3、共享記憶體通信。

linux進程間的通訊方式有哪三種

本教學操作環境:Ubuntu 16.04系統、Dell G3電腦。

linux 進程間通訊的3種方式

#由於不同的進程運行在各自不同的記憶體空間中.一方對於變數的修改另一方是無法感知的.因此.進程之間的訊息傳遞不可能透過變數或其它資料結構直接進行,只能通進程間通訊來完成。

根據進程通訊時資訊量大小的不同,可以將進程通訊分割為兩大類型:控制資訊的通訊與大批資料資訊的通訊.前者稱為低級通信,後者稱為高級通信。

低階通訊主要用於進程之間的同步、互斥、終止、掛起等等控制訊息的傳遞。

高階通訊主要用於進程間資料區塊的交換與共用 常見的高階通訊有管道(PIPE)、訊息佇列(MESSAGE)、共用記憶體(SHARED MEM0RY)等。

這裡主要比較一下高階通訊的這三種方式的特點。

管線通訊(PIPE)

      兩個流程利用管道進行通訊時.發送訊息的進程稱為寫入進程.接收訊息的進程稱為讀取進程。管道通訊方式的中間介質就是文件.通常稱這種文件為管道文件.它就像管道一樣將一個寫入進程和一個讀取進程連接在一起,實現兩個進程之間的通訊。寫入程序透過寫入端(發送端)往管道檔案寫入訊息;讀取進程透過讀出端(接收端)從管道檔案讀取訊息。兩個進程協調不斷地進行寫和讀,便會構成雙方透過管道傳遞訊息的流水線。

      利用系統呼叫PIPE()可以建立一個無名管道文件,通常稱為無名管道或PIPE;利用系統呼叫MKNOD()可以創建一個有名管道文件.通常稱為有名管道或FIFO。無名管道是一種非永

久性的管道通訊機構.當它所存取的進程全部終止時,它也將隨之被撤銷。無名管道只能用在具有家族連結的進程之間。有名管道可以長期存在於系統之中.而且提供給任意關係的進程使用,但是使用不當容易導致出錯.所以作業系統將命名管道的管理權交由系統來加以控制管道文件被創建後,可以透過系統調用WRITE()和READ()來實現對管道的讀寫操作;通信完後,可用CLOSE()將管道文件關閉。

訊息緩衝通訊(MESSAGE)

      多個獨立的進程之間可以透過訊息緩衝機制來相互溝通.這種通訊的實作是以訊息緩衝區為中間介質.通訊雙方的發送和接收操作均以訊息為單位。在記憶體中,訊息緩衝區被組織成佇列,通常稱之為訊息佇列。訊息佇列一旦建立後即可由多進程共用.發送訊息的進程可以在任意時刻發送任意個訊息到指定的訊息佇列上,並檢查是否有接收進程在等待它所發送的訊息。若有則喚醒它:而接收訊息的進程可以在需要訊息的時候到指定的訊息佇列上取得訊息.如果訊息還沒到來.則轉入睡眠狀態等待。

共享記憶體通訊(SHARED MEMORY)

      針對訊息緩衝需要佔用CPU進行訊息複製的缺點. OS提供了一種進程間直接進行資料交換的通訊方式一共享記憶體 顧名思義.這種通訊方式允許多個進程在外部通訊協定或同步,互斥機制的支援下使用同一個記憶體段(作為中間介質)進行通訊.它是一種最有效的數據通訊方式,其特點是沒有中間環節.直接將共享的記憶體頁面透過附接.映射到相互通訊的進程各自的虛擬位址空間.從而使多個進程可以直接存取同一個實體記憶體頁.如同存取自己的私有空間一樣(但實質上不是私有的而是共享的)。因此這種進程間通訊方式是在同一個電腦系統中的諸進程間實現通訊的最快捷的方法.而它的限制也在於此.即共享記憶體的諸進程必須共處同一個電腦系統.有實體記憶體可以共享才行。

三種方式的特性(優缺點):

1.無名管道簡單方便.但侷限於單向通訊的工作方式.並且只能在創建它的進程及其子孫進程之間實現管道的共享:有名管道雖然可以提供給任意關係的進程使用.但是由於其長期存在於系統之中,使用不當容易出錯。

2.訊息緩衝可以不再侷限於父子進程.而允許任意進程透過共享訊息佇列來實現進程間通訊.並由系統呼叫函數來實現訊息發送與接收之間的同步.從而使得使用者在使用訊息緩衝進行通訊時不再需要考慮同步問題.使用方便,但是資訊的複製需要額外消耗CPU的時間.不適宜於資訊量大或操作頻繁的場合。

3.共享記憶體針對訊息緩衝的缺點改而利用記憶體緩衝區直接交換訊息,無須複製,快速、資訊量大是其優點。但是共享記憶體的通訊方式是透過將共享的記憶體緩衝區直接附加到進程的虛擬位址空間來實現的.因此,這些進程之間的讀寫操作的同步問題作業系統無法實現。必須由各行程利用其他同步工具解決。另外,由於記憶體實體存在於電腦系統中.所以只能由處於同一個電腦系統中的諸進程共享。不方便網路通訊。

相關推薦:《Linux影片教學

以上是linux進程間的通訊方式有哪三種的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn