溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

linux進程間的通信方式有哪幾種

發(fā)布時間:2021-07-23 17:02:02 來源:億速云 閱讀:336 作者:chen 欄目:建站服務器

這篇文章主要介紹“l(fā)inux進程間的通信方式有哪幾種”,在日常操作中,相信很多人在linux進程間的通信方式有哪幾種問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”linux進程間的通信方式有哪幾種”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

linux進程間通信的3種方式:1、管道通信,發(fā)送信息的進程稱為寫進程,接收信息的進程稱為讀進程。2、消息緩沖通信,以消息緩沖區(qū)為中間介質(zhì),通信雙方的發(fā)送和接收操作均以消息為單位。3、共享內(nèi)存通信。

本教程操作環(huán)境:Ubuntu 16.04系統(tǒng)、Dell G3電腦。

linux 進程間通信的3種方式

由于不同的進程運行在各自不同的內(nèi)存空間中.一方對于變量的修改另一方是無法感知的.因此.進程之間的信息傳遞不可能通過變量或其它數(shù)據(jù)結(jié)構(gòu)直接進行,只能通進程間通信來完成。

根據(jù)進程通信時信息量大小的不同,可以將進程通信劃分為兩大類型:控制信息的通信和大批數(shù)據(jù)信息的通信.前者稱為低級通信,后者稱為高級通信。

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

高級通信主要用于進程間數(shù)據(jù)塊的交換和共享 常見的高級通信有管道(PIPE)、消息隊列(MESSAGE)、共享內(nèi)存(SHARED MEM0RY)等。

這里主要比較一下高級通信的這三種方式的特點。

管道通信(PIPE)

兩個進程利用管道進行通信時.發(fā)送信息的進程稱為寫進程.接收信息的進程稱為讀進程。管道通信方式的中間介質(zhì)就是文件.通常稱這種文件為管道文件.它就像管道一樣將一個寫進程和一個讀進程連接在一起,實現(xiàn)兩個進程之間的通信。寫進程通過寫入端(發(fā)送端)往管道文件中寫入信息;讀進程通過讀出端(接收端)從管道文件中讀取信息。兩個進程協(xié)調(diào)不斷地進行寫和讀,便會構(gòu)成雙方通過管道傳遞信息的流水線。

利用系統(tǒng)調(diào)用PIPE()可以創(chuàng)建一個無名管道文件,通常稱為無名管道或PIPE;利用系統(tǒng)調(diào)用MKNOD()可以創(chuàng)建一個有名管道文件.通常稱為有名管道或FIFO。無名管道是一種非永

久性的管道通信機構(gòu).當它訪問的進程全部終止時,它也將隨之被撤消。無名管道只能用在具有家族聯(lián)系的進程之間。有名管道可以長期存在于系統(tǒng)之中.而且提供給任意關(guān)系的進程使用,但是使用不當容易導致出錯.所以操作系統(tǒng)將命名管道的管理權(quán)交由系統(tǒng)來加以控制管道文件被創(chuàng)建后,可以通過系統(tǒng)調(diào)用WRITE()和READ()來實現(xiàn)對管道的讀寫操作;通信完后,可用CLOSE()將管道文件關(guān)閉。

消息緩沖通信(MESSAGE)

多個獨立的進程之間可以通過消息緩沖機制來相互通信.這種通信的實現(xiàn)是以消息緩沖區(qū)為中間介質(zhì).通信雙方的發(fā)送和接收操作均以消息為單位。在存儲器中,消息緩沖區(qū)被組織成隊列,通常稱之為消息隊列。消息隊列一旦創(chuàng)建后即可由多進程共享.發(fā)送消息的進程可以在任意時刻發(fā)送任意個消息到指定的消息隊列上,并檢查是否有接收進程在等待它所發(fā)送的消息。若有則喚醒它:而接收消息的進程可以在需要消息的時候到指定的消息隊列上獲取消息.如果消息還沒有到來.則轉(zhuǎn)入睡眠狀態(tài)等待。

共享內(nèi)存通信(SHARED MEMORY)

針對消息緩沖需要占用CPU進行消息復制的缺點.OS提供了一種進程間直接進行數(shù)據(jù)交換的通信方式一共享內(nèi)存 顧名思義.這種通信方式允許多個進程在外部通信協(xié)議或同步,互斥機制的支持下使用同一個內(nèi)存段(作為中間介質(zhì))進行通信.它是一種最有效的數(shù)據(jù)通信方式,其特點是沒有中間環(huán)節(jié).直接將共享的內(nèi)存頁面通過附接.映射到相互通信的進程各自的虛擬地址空間中.從而使多個進程可以直接訪問同一個物理內(nèi)存頁面.如同訪問自己的私有空間一樣(但實質(zhì)上不是私有的而是共享的)。因此這種進程間通信方式是在同一個計算機系統(tǒng)中的諸進程間實現(xiàn)通信的最快捷的方法.而它的局限性也在于此.即共享內(nèi)存的諸進程必須共處同一個計算機系統(tǒng).有物理內(nèi)存可以共享才行。

三種方式的特點(優(yōu)缺點):

1.無名管道簡單方便.但局限于單向通信的工作方式.并且只能在創(chuàng)建它的進程及其子孫進程之間實現(xiàn)管道的共享:有名管道雖然可以提供給任意關(guān)系的進程使用.但是由于其長期存在于系統(tǒng)之中,使用不當容易出錯。

2.消息緩沖可以不再局限于父子進程.而允許任意進程通過共享消息隊列來實現(xiàn)進程間通信.并由系統(tǒng)調(diào)用函數(shù)來實現(xiàn)消息發(fā)送和接收之間的同步.從而使得用戶在使用消息緩沖進行通信時不再需要考慮同步問題.使用方便,但是信息的復制需要額外消耗CPU的時間.不適宜于信息量大或操作頻繁的場合。

3.共享內(nèi)存針對消息緩沖的缺點改而利用內(nèi)存緩沖區(qū)直接交換信息,無須復制,快捷、信息量大是其優(yōu)點。但是共享內(nèi)存的通信方式是通過將共享的內(nèi)存緩沖區(qū)直接附加到進程的虛擬地址空間中來實現(xiàn)的.因此,這些進程之間的讀寫操作的同步問題操作系統(tǒng)無法實現(xiàn)。必須由各進程利用其他同步工具解決。另外,由于內(nèi)存實體存在于計算機系統(tǒng)中.所以只能由處于同一個計算機系統(tǒng)中的諸進程共享。不方便網(wǎng)絡通信。

到此,關(guān)于“l(fā)inux進程間的通信方式有哪幾種”的學習就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI