淺談Linux進(jìn)程間通信方式及優(yōu)缺點(diǎn)
1)管道
管道分為有名管道和無(wú)名管道
無(wú)名管道是一種半雙工的通信方式,數(shù)據(jù)只能單向流動(dòng),而且只能在具有親緣關(guān)系的進(jìn)程間使用.進(jìn)程的親緣關(guān)系一般指的是父子關(guān)系。無(wú)明管道一般用于兩個(gè)不同進(jìn)程之間的通信。當(dāng)一個(gè)進(jìn)程創(chuàng)建了一個(gè)管道,并調(diào)用fork創(chuàng)建自己的一個(gè)子進(jìn)程后,父進(jìn)程關(guān)閉讀管道端,子進(jìn)程關(guān)閉寫管道端,這樣提供了兩個(gè)進(jìn)程之間數(shù)據(jù)流動(dòng)的一種方式。
有名管道也是一種半雙工的通信方式,但是它允許無(wú)親緣關(guān)系進(jìn)程間的通信。
2)信號(hào)量
信號(hào)量是一個(gè)計(jì)數(shù)器,可以用來(lái)控制多個(gè)線程對(duì)共享資源的訪問(wèn).,它不是用于交換大批數(shù)據(jù),而用于多線程之間的同步.它常作為一種鎖機(jī)制,防止某進(jìn)程在訪問(wèn)資源時(shí)其它進(jìn)程也訪問(wèn)該資源.因此,主要作為進(jìn)程間以及同一個(gè)進(jìn)程內(nèi)不同線程之間的同步手段.
Linux提供了一組精心設(shè)計(jì)的信號(hào)量接口來(lái)對(duì)信號(hào)進(jìn)行操作,它們不只是針對(duì)二進(jìn)制信號(hào)量,下面將會(huì)對(duì)這些函數(shù)進(jìn)行介紹,但請(qǐng)注意,這些函數(shù)都是用來(lái)對(duì)成組的信號(hào)量值進(jìn)行操作的。它們聲明在頭文件sys/sem.h中。
semget函數(shù)
它的作用是創(chuàng)建一個(gè)新信號(hào)量或取得一個(gè)已有信號(hào)量
semop函數(shù)
它的作用是改變信號(hào)量的值
semctl函數(shù)
該函數(shù)用來(lái)直接控制信號(hào)量信息
3)信號(hào)
信號(hào)是一種比較復(fù)雜的通信方式,用于通知接收進(jìn)程某個(gè)事件已經(jīng)發(fā)生.
4)消息隊(duì)列
消息隊(duì)列是消息的鏈表,存放在內(nèi)核中并由消息隊(duì)列標(biāo)識(shí)符標(biāo)識(shí).消息隊(duì)列克服了信號(hào)傳遞信息少,管道只能承載無(wú)格式字節(jié)流以及緩沖區(qū)大小受限等特點(diǎn).消息隊(duì)列是UNIX下不同進(jìn)程之間可實(shí)現(xiàn)共享資源的一種機(jī)制,UNIX允許不同進(jìn)程將格式化的數(shù)據(jù)流以消息隊(duì)列形式發(fā)送給任意進(jìn)程.對(duì)消息隊(duì)列具有操作權(quán)限的進(jìn)程都可以使用msget完成對(duì)消息隊(duì)列的操作控制.通過(guò)使用消息類型,進(jìn)程可以按任何順序讀信息,或?yàn)橄才艃?yōu)先級(jí)順序.
5)共享內(nèi)存
共享內(nèi)存就是映射一段能被其他進(jìn)程所訪問(wèn)的內(nèi)存,這段共享內(nèi)存由一個(gè)進(jìn)程創(chuàng)建,但多個(gè)進(jìn)程都可以訪問(wèn).共享內(nèi)存是最快的IPC(進(jìn)程間通信)方式,它是針對(duì)其它進(jìn)程間通信方式運(yùn)行效率低而專門設(shè)計(jì)的.它往往與其他通信機(jī)制,如信號(hào)量,配合使用,來(lái)實(shí)現(xiàn)進(jìn)程間的同步與通信.
6)套接字
socket,即套接字是一種通信機(jī)制,憑借這種機(jī)制,客戶/服務(wù)器(即要進(jìn)行通信的進(jìn)程)系統(tǒng)的開發(fā)工作既可以在本地單機(jī)上進(jìn)行,也可以跨網(wǎng)絡(luò)進(jìn)行。也就是說(shuō)它可以讓不在同一臺(tái)計(jì)算機(jī)但通過(guò)網(wǎng)絡(luò)連接計(jì)算機(jī)上的進(jìn)程進(jìn)行通信。也因?yàn)檫@樣,套接字明確地將客戶端和服務(wù)器區(qū)分開來(lái)。
套接字的特性由3個(gè)屬性確定,它們分別是:域、類型和協(xié)議。
可用于不同及其間的進(jìn)程通信
總結(jié)
以上就是本文關(guān)于淺談Linux進(jìn)程間通信方式及優(yōu)缺點(diǎn)的全部?jī)?nèi)容,希望對(duì)大家有所幫助。歡迎參閱:Linux十個(gè)新手命令分享、Linux下文件的切分與合并的簡(jiǎn)單方法介紹、詳解Docker使用Linux iptables 和 Interfaces管理容器網(wǎng)絡(luò)等,感謝朋友們對(duì)本站的支持!
相關(guān)文章
CentOS服務(wù)器apache綁定多個(gè)域名的方法
這篇文章主要為大家詳細(xì)介紹了CentOS服務(wù)器apache綁定多個(gè)域名的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11
基于centos7 安裝python3.6.4出錯(cuò)的解決方法
下面小編就為大家分享一篇基于centos7 安裝python3.6.4出錯(cuò)的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-01-01
Linux下如何實(shí)現(xiàn)創(chuàng)建/刪除軟連接
這篇文章主要介紹了Linux下如何實(shí)現(xiàn)創(chuàng)建/刪除軟連接方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
Linux Centos7系統(tǒng)端口占用問(wèn)題的解決方法
這篇文章主要給大家介紹了關(guān)于Linux Centos7系統(tǒng)端口占用問(wèn)題的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-01-01
ubuntu開機(jī)自啟動(dòng)服務(wù)設(shè)置
大家好,本篇文章主要講的是ubuntu開機(jī)自啟動(dòng)服務(wù)設(shè)置,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽2021-12-12
在Debian系的Linux中編譯并安裝ixgbe驅(qū)動(dòng)的教程
這篇文章主要介紹了在Linux中編譯并安裝ixgbe驅(qū)動(dòng)的教程,采用bash shell、適用于Debian、Ubuntu等各種基于Debian的Linux系統(tǒng),需要的朋友可以參考下2015-03-03

