程序間的通訊與執行緒間通訊

2021-10-08 05:03:04 字數 1102 閱讀 4135

程序間通訊(ipc,interprocess communication)是指在不同程序之間傳播或交換資訊。

ipc的方式通常有管道(包括無名管道和命名管道)、訊息佇列、訊號量、共享儲存、socket、streams等。其中 socket和streams支援不同主機上的兩個程序ipc。

同一主機上的程序通訊方式

網路主機間的程序通訊方式

各自的特點:

管道(pipe):管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係(父子程序)的程序間使用。另外管道傳送的是無格式的位元組流,並且管道緩衝區的大小是有限的(管道緩衝區存在於記憶體中,在管道建立時,為緩衝區分配乙個頁面大小)。

有名管道 (fifo): 有名管道也是半雙工的通訊方式,但是它允許無親緣關係程序間的通訊。

訊號(signal): 訊號是一種比較複雜的通訊方式,用於通知接收程序某個事件已經發生。

訊號量(semaphore):訊號量是乙個計數器,可以用來控制多個程序對共享資源的訪問。它常作為一種鎖機制,防止某程序正在訪問共享資源時,其他程序也訪問該資源。因此,主要作為程序間以及同一程序內不同執行緒之間的同步手段。

訊息佇列(message queue):訊息佇列是由訊息的鍊錶,存放在核心中並由訊息佇列識別符號標識。訊息佇列克服了訊號傳遞資訊少、管道只能承載無格式位元組流以及緩衝區大小受限等缺點。

共享記憶體(shared memory ):共享記憶體就是對映一段能被其他程序所訪問的記憶體,這段共享記憶體由乙個程序建立,但多個程序都可以訪問。共享記憶體是最快的 ipc 方式,它是針對其他程序間通訊方式執行效率低而專門設計的。它往往與其他通訊機制,如訊號量,配合使用,來實現程序間的同步和通訊。

套接字(socket): 套解口也是一種程序間通訊機制,與其他通訊機制不同的是,它可用於不同主機間的程序通訊。

互斥鎖提供了以排他方式防止資料結構被併發修改的方法。

使用條件變數可以以原子的方式阻塞程序,直到某個特定條件為真為止。對條件的測試是在互斥鎖的保護下進行的。條件變數始終與互斥鎖一起使用。

讀寫鎖允許多個執行緒同時讀共享資料,而對寫操作是互斥的。

執行緒間的通訊目的主要是用於執行緒同步。所以執行緒沒有像程序通訊中的用於資料交換的通訊機制。

程序間通訊和執行緒間通訊

程序間通訊 ipc,interprocess communication 是一組程式設計介面,讓程式設計師能夠協調不同的程序,使之能在乙個作業系統裡同時執行,並相互傳遞 交換資訊。這使得乙個程式能夠在同一時間裡處理許多使用者的要求。因為即使只有乙個使用者發出要求,也可能導致乙個作業系統中多個程序的執...

程序間通訊ipc 執行緒間通訊

程序間通訊 ipc,inter process communication 指至少兩個程序或執行緒間傳送資料或訊號的一些技術或方法。程序是計算機系統分配資源的最小單位 嚴格說來是執行緒 每個程序都有自己的一部分獨立的系統資源,彼此是隔離的。為了能使不同的程序互相訪問資源並進行協調工作,才有了程序間通...

windows下程序間通訊與執行緒間通訊

程序間通訊 只需簡單的指標操作就可讀取和修改檔案的內容。win32 api允許多個程序訪問同一檔案對映物件,各個程序在它自己的位址空間裡接收記憶體的指標通過使用這些指標,不同程序就可以讀或修改檔案的內容,實現對檔案中資料的共享。檔案對映是在多個程序間共享資料的非常有效方法,有較好的安全性。但檔案對映...