這篇文章主要介紹“l(fā)inux進(jìn)程間的通信方式有哪幾種”,在日常操作中,相信很多人在linux進(jìn)程間的通信方式有哪幾種問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對(duì)大家解答”linux進(jìn)程間的通信方式有哪幾種”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
創(chuàng)新互聯(lián)建站-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比曲松網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式曲松網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋曲松地區(qū)。費(fèi)用合理售后完善,10余年實(shí)體公司更值得信賴。
linux進(jìn)程間通信的3種方式:1、管道通信,發(fā)送信息的進(jìn)程稱為寫進(jìn)程,接收信息的進(jìn)程稱為讀進(jìn)程。2、消息緩沖通信,以消息緩沖區(qū)為中間介質(zhì),通信雙方的發(fā)送和接收操作均以消息為單位。3、共享內(nèi)存通信。
本教程操作環(huán)境:Ubuntu 16.04系統(tǒng)、Dell G3電腦。
linux 進(jìn)程間通信的3種方式
由于不同的進(jìn)程運(yùn)行在各自不同的內(nèi)存空間中.一方對(duì)于變量的修改另一方是無法感知的.因此.進(jìn)程之間的信息傳遞不可能通過變量或其它數(shù)據(jù)結(jié)構(gòu)直接進(jìn)行,只能通進(jìn)程間通信來完成。
根據(jù)進(jìn)程通信時(shí)信息量大小的不同,可以將進(jìn)程通信劃分為兩大類型:控制信息的通信和大批數(shù)據(jù)信息的通信.前者稱為低級(jí)通信,后者稱為高級(jí)通信。
低級(jí)通信主要用于進(jìn)程之間的同步、互斥、終止、掛起等等控制信息的傳遞。
高級(jí)通信主要用于進(jìn)程間數(shù)據(jù)塊的交換和共享 常見的高級(jí)通信有管道(PIPE)、消息隊(duì)列(MESSAGE)、共享內(nèi)存(SHARED MEM0RY)等。
這里主要比較一下高級(jí)通信的這三種方式的特點(diǎn)。
管道通信(PIPE)
兩個(gè)進(jìn)程利用管道進(jìn)行通信時(shí).發(fā)送信息的進(jìn)程稱為寫進(jìn)程.接收信息的進(jìn)程稱為讀進(jìn)程。管道通信方式的中間介質(zhì)就是文件.通常稱這種文件為管道文件.它就像管道一樣將一個(gè)寫進(jìn)程和一個(gè)讀進(jìn)程連接在一起,實(shí)現(xiàn)兩個(gè)進(jìn)程之間的通信。寫進(jìn)程通過寫入端(發(fā)送端)往管道文件中寫入信息;讀進(jìn)程通過讀出端(接收端)從管道文件中讀取信息。兩個(gè)進(jìn)程協(xié)調(diào)不斷地進(jìn)行寫和讀,便會(huì)構(gòu)成雙方通過管道傳遞信息的流水線。
利用系統(tǒng)調(diào)用PIPE()可以創(chuàng)建一個(gè)無名管道文件,通常稱為無名管道或PIPE;利用系統(tǒng)調(diào)用MKNOD()可以創(chuàng)建一個(gè)有名管道文件.通常稱為有名管道或FIFO。無名管道是一種非永
久性的管道通信機(jī)構(gòu).當(dāng)它訪問的進(jìn)程全部終止時(shí),它也將隨之被撤消。無名管道只能用在具有家族聯(lián)系的進(jìn)程之間。有名管道可以長期存在于系統(tǒng)之中.而且提供給任意關(guān)系的進(jìn)程使用,但是使用不當(dāng)容易導(dǎo)致出錯(cuò).所以操作系統(tǒng)將命名管道的管理權(quán)交由系統(tǒng)來加以控制管道文件被創(chuàng)建后,可以通過系統(tǒng)調(diào)用WRITE()和READ()來實(shí)現(xiàn)對(duì)管道的讀寫操作;通信完后,可用CLOSE()將管道文件關(guān)閉。
消息緩沖通信(MESSAGE)
多個(gè)獨(dú)立的進(jìn)程之間可以通過消息緩沖機(jī)制來相互通信.這種通信的實(shí)現(xiàn)是以消息緩沖區(qū)為中間介質(zhì).通信雙方的發(fā)送和接收操作均以消息為單位。在存儲(chǔ)器中,消息緩沖區(qū)被組織成隊(duì)列,通常稱之為消息隊(duì)列。消息隊(duì)列一旦創(chuàng)建后即可由多進(jìn)程共享.發(fā)送消息的進(jìn)程可以在任意時(shí)刻發(fā)送任意個(gè)消息到指定的消息隊(duì)列上,并檢查是否有接收進(jìn)程在等待它所發(fā)送的消息。若有則喚醒它:而接收消息的進(jìn)程可以在需要消息的時(shí)候到指定的消息隊(duì)列上獲取消息.如果消息還沒有到來.則轉(zhuǎn)入睡眠狀態(tài)等待。
共享內(nèi)存通信(SHARED MEMORY)
針對(duì)消息緩沖需要占用CPU進(jìn)行消息復(fù)制的缺點(diǎn).OS提供了一種進(jìn)程間直接進(jìn)行數(shù)據(jù)交換的通信方式一共享內(nèi)存 顧名思義.這種通信方式允許多個(gè)進(jìn)程在外部通信協(xié)議或同步,互斥機(jī)制的支持下使用同一個(gè)內(nèi)存段(作為中間介質(zhì))進(jìn)行通信.它是一種最有效的數(shù)據(jù)通信方式,其特點(diǎn)是沒有中間環(huán)節(jié).直接將共享的內(nèi)存頁面通過附接.映射到相互通信的進(jìn)程各自的虛擬地址空間中.從而使多個(gè)進(jìn)程可以直接訪問同一個(gè)物理內(nèi)存頁面.如同訪問自己的私有空間一樣(但實(shí)質(zhì)上不是私有的而是共享的)。因此這種進(jìn)程間通信方式是在同一個(gè)計(jì)算機(jī)系統(tǒng)中的諸進(jìn)程間實(shí)現(xiàn)通信的最快捷的方法.而它的局限性也在于此.即共享內(nèi)存的諸進(jìn)程必須共處同一個(gè)計(jì)算機(jī)系統(tǒng).有物理內(nèi)存可以共享才行。
三種方式的特點(diǎn)(優(yōu)缺點(diǎn)):
1.無名管道簡單方便.但局限于單向通信的工作方式.并且只能在創(chuàng)建它的進(jìn)程及其子孫進(jìn)程之間實(shí)現(xiàn)管道的共享:有名管道雖然可以提供給任意關(guān)系的進(jìn)程使用.但是由于其長期存在于系統(tǒng)之中,使用不當(dāng)容易出錯(cuò)。
2.消息緩沖可以不再局限于父子進(jìn)程.而允許任意進(jìn)程通過共享消息隊(duì)列來實(shí)現(xiàn)進(jìn)程間通信.并由系統(tǒng)調(diào)用函數(shù)來實(shí)現(xiàn)消息發(fā)送和接收之間的同步.從而使得用戶在使用消息緩沖進(jìn)行通信時(shí)不再需要考慮同步問題.使用方便,但是信息的復(fù)制需要額外消耗CPU的時(shí)間.不適宜于信息量大或操作頻繁的場合。
3.共享內(nèi)存針對(duì)消息緩沖的缺點(diǎn)改而利用內(nèi)存緩沖區(qū)直接交換信息,無須復(fù)制,快捷、信息量大是其優(yōu)點(diǎn)。但是共享內(nèi)存的通信方式是通過將共享的內(nèi)存緩沖區(qū)直接附加到進(jìn)程的虛擬地址空間中來實(shí)現(xiàn)的.因此,這些進(jìn)程之間的讀寫操作的同步問題操作系統(tǒng)無法實(shí)現(xiàn)。必須由各進(jìn)程利用其他同步工具解決。另外,由于內(nèi)存實(shí)體存在于計(jì)算機(jī)系統(tǒng)中.所以只能由處于同一個(gè)計(jì)算機(jī)系統(tǒng)中的諸進(jìn)程共享。不方便網(wǎng)絡(luò)通信。
到此,關(guān)于“l(fā)inux進(jìn)程間的通信方式有哪幾種”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!