linux進(jìn)程間通信的方式有哪些

linux進(jìn)程間通信的方式有:1、管道(包括匿名管道和命名管道);2、信號;3、消息隊(duì)列;4、共享內(nèi)存;5、信號量;6、套接字。管道的實(shí)質(zhì)是一個(gè)內(nèi)核緩沖區(qū),進(jìn)程利用管道傳遞信息。

linux進(jìn)程間通信的方式有哪些

linux進(jìn)程間通信的方式:

(推薦學(xué)習(xí):linux教程

Linux進(jìn)程間基本的通信方式主要有:管道(pipe)(包括匿名管道和命名管道)、信號(signal)、消息隊(duì)列(queue)、共享內(nèi)存、信號量和套接字。

下面分別介紹一下這幾種方式:

1、管道

管道的實(shí)質(zhì)是一個(gè)內(nèi)核緩沖區(qū),管道的作用正如其名,需要通信的兩個(gè)進(jìn)程在管道的兩端,進(jìn)程利用管道傳遞信息。管道對于管道兩端的進(jìn)程而言,就是一個(gè)文件,但是這個(gè)文件比較特殊,它不屬于文件系統(tǒng)并且只存在于內(nèi)存中。

2、信號

信號是軟件層次上對中斷機(jī)制的一種模擬,是一種異步通信方式,進(jìn)程不必通過任何操作來等待信號的到達(dá)。信號可以在用戶空間進(jìn)程和內(nèi)核之間直接交互,內(nèi)核可以利用信號來通知用戶空間的進(jìn)程發(fā)生了哪些系統(tǒng)事件。

3、消息隊(duì)列

消息隊(duì)列是消息的鏈表,具有特定的格式,存放在內(nèi)存中并由消息隊(duì)列標(biāo)識符標(biāo)識,并且允許一個(gè)或多個(gè)進(jìn)程向它寫入與讀取消息

4、共享內(nèi)存

使得多個(gè)進(jìn)程可以可以直接讀寫同一塊內(nèi)存空間,是針對其他通信機(jī)制運(yùn)行效率較低而設(shè)計(jì)的。

為了在多個(gè)進(jìn)程間交換信息,內(nèi)核專門留出了一塊內(nèi)存區(qū),可以由需要訪問的進(jìn)程將其映射到自己的私有地址空間。進(jìn)程就可以直接讀寫這一塊內(nèi)存而不需要進(jìn)行數(shù)據(jù)的拷貝,從而大大提高效率。

注意:共享內(nèi)存并未提供同步機(jī)制,在一個(gè)進(jìn)程結(jié)束對共享內(nèi)存的寫操作之前,并無自動機(jī)制可以阻止另二個(gè)進(jìn)程開始對它進(jìn)行讀取。所以,我們通常需要用其他的機(jī)制來同步對共享內(nèi)存的訪問。

5、信號量

信號量實(shí)質(zhì)上就是一個(gè)標(biāo)識可用資源數(shù)量的計(jì)數(shù)器,它的值總是非負(fù)整數(shù)。而只有0和1兩種取值的信號量叫做二進(jìn)制信號量(或二值信號量),可用用來標(biāo)識某個(gè)資源是否可用。

6、套接字

套接字是更為基礎(chǔ)的進(jìn)程間通信機(jī)制,與其他方式不同的是,套接字可用于不同機(jī)器之間的進(jìn)程間通信。

有兩種類型的套接字:基于文件的和面向網(wǎng)絡(luò)的。

(1)Unix套接字是基于文件的,并且擁有一個(gè)“家族名字”–AF_UNIX,它代表地址家族(address family):UNIX。

(2)第二類型的套接字是基于網(wǎng)絡(luò)的,它也有自己的家族名字–AF_INET,代表地址家族(address family):INTERNET

不管采用哪種地址家族,都有兩種不同的套接字連接:面向連接的和無連接的。

(1)面向連接的套接字(SOCK_STREAM)

進(jìn)行通信前必須建立一個(gè)連接,面向連接的通信提供序列化的、可靠地和不重復(fù)的數(shù)據(jù)交付,而沒有記錄邊界。

這意味著每條信息可以被拆分成多個(gè)片段,并且每個(gè)片段都能確保到達(dá)目的地,然后在目的地將信息拼接起來。

實(shí)現(xiàn)這種連接類型的主要協(xié)議是傳輸控制協(xié)議(TCP)。

(2)無連接的套接字(SOCK_DGRAM)

在通信開始之前并不需要建立連接,在數(shù)據(jù)傳輸過程中并無法保證它的順序性、可靠性或重復(fù)性。

然而,數(shù)據(jù)報(bào)確實(shí)保存了記錄邊界,這就意味著消息是以整體發(fā)送的,而并非首先分成多個(gè)片段。

由于面向連接的套接字所提供的保證,因此它們的設(shè)置以及對虛擬電路連接的維護(hù)需要大量的開銷。然而,數(shù)據(jù)報(bào)不需要這些開銷,即它的成本更加“低廉”。

實(shí)現(xiàn)這種連接類型的主要協(xié)議是用戶數(shù)據(jù)報(bào)協(xié)議(UDP)。

以上就是

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊6 分享