亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

linux有幾種方式實現進程間通信

發布時間:2020-06-29 16:29:29 來源:億速云 閱讀:222 作者:元一 欄目:建站服務器

linux有幾種方式實現進程間通信?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

進程概念:

進程是操作系統的概念,每當我們執行一個程序時,對于操作系統來講就創建了一個進程,在這個過程中,伴隨著資源的分配和釋放。可以認為進程是一個程序的一次執行過程。

進程通信概念:

進程用戶空間是相互獨立的,一般而言是不能相互訪問的。但很多情況下進程間需要互相通信,來完成系統的某項功能。進程通過與內核及其它進程之間的互相通信來協調它們的行為。

linux進程間通信的方式:

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

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

1、管道

管道的實質是一個內核緩沖區,管道的作用正如其名,需要通信的兩個進程在管道的兩端,進程利用管道傳遞信息。管道對于管道兩端的進程而言,就是一個文件,但是這個文件比較特殊,它不屬于文件系統并且只存在于內存中。

2、信號

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

3、消息隊列

消息隊列是消息的鏈表,具有特定的格式,存放在內存中并由消息隊列標識符標識,并且允許一個或多個進程向它寫入與讀取消息

4、共享內存

使得多個進程可以可以直接讀寫同一塊內存空間,是針對其他通信機制運行效率較低而設計的。

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

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

5、信號量

信號量實質上就是一個標識可用資源數量的計數器,它的值總是非負整數。而只有0和1兩種取值的信號量叫做二進制信號量(或二值信號量),可用用來標識某個資源是否可用。

6、套接字

套接字是更為基礎的進程間通信機制,與其他方式不同的是,套接字可用于不同機器之間的進程間通信。

有兩種類型的套接字:基于文件的和面向網絡的。

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

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

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

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

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

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

實現這種連接類型的主要協議是傳輸控制協議(TCP)。

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

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

然而,數據報確實保存了記錄邊界,這就意味著消息是以整體發送的,而并非首先分成多個片段。

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

實現這種連接類型的主要協議是用戶數據報協議(UDP)。

應用場景:

  • 數據傳輸:一個進程需要將它的數據發送給另一個進程,發送的數據量在一個字節到幾兆字節之間。

  • 共享數據:多個進程想要操作共享數據,一個進程對共享數據的修改,別的進程應該立刻看到。

  • 通知事件:一個進程需要向另一個或一組進程發送消息,通知它(它們)發生了某種事件(如進程終止時要通知父進程)。

  • 資源共享:多個進程之間共享同樣的資源。為了作到這一點,需要內核提供鎖和同步機制。

  • 進程控制:有些進程希望完全控制另一個進程的執行(如Debug進程),此時控制進程希望能夠攔截另一個進程的所有陷入和異常,并能夠及時知道它的狀態改變。

關于linux有幾種方式實現進程間通信問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

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

AI

乐亭县| 盘锦市| 陆丰市| 温宿县| 皮山县| 巴青县| 张家界市| 淮北市| 长白| 贵港市| 收藏| 灵璧县| 疏附县| 通城县| 介休市| 南雄市| 栾城县| 宁海县| 梅州市| 惠东县| 马龙县| 都兰县| 老河口市| 隆子县| 镇康县| 巴青县| 威远县| 内江市| 来安县| 包头市| 蒲城县| 三台县| 镇江市| 乌鲁木齐县| 花莲市| 昌邑市| 北碚区| 维西| 虹口区| 堆龙德庆县| 江陵县|