程序間通訊

2021-08-21 07:41:09 字數 957 閱讀 2765

廣義上講,程序間通訊(inter-process communication, ipc)是指執行在不同程序(不論是否在同一臺機器)中的若干執行緒間的資料交換。

從上面的定義可以得出兩點:

程序間通訊方式有管道、訊號量、訊號、訊息佇列、共享記憶體、套接字六種。

(1)管道(pipe)分為有名管道和無名管道,其中無名管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用,一般用於兩個不同程序之間的通訊。有名管道也是一種半雙工的通訊方式,但它允許無親緣關係程序間的通訊。

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

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

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

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

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

程序的掛起:系統在超過一定的時間沒有任何動作。

程序的阻塞:程序因等待某一件事情(如等待i/o裝置)而暫時不能執行的狀態,此時即使處理機空閒,程序也無法使用。系統中處於阻塞態(又稱封鎖態、等待態、睡眠態)的程序也可以有多個。

php程序間通訊 yoc PHP程序間通訊

php是用c編寫的,因此它對系統底層api的操作與c很像,同大多數語言一樣,php程序間通訊的方式有以下幾種 訊息佇列,管道,共享記憶體,socket和訊號。本文是對這幾種通訊方式對整理 管道通訊pipe 管道用於承載簡稱之間的通訊資料。為了方便理解,可以將管道比作檔案,程序a將資料寫到管道p中,然...

程序間通訊

實現程序間資料共享除了常用的記憶體檔案對映外,對於一些非檔案的資料共享可以直接使用wm copydata。如果需要在程序a傳遞資料到程序b,簡單的實現如下 在程序a中 cstring strdatatosend t hello 需要傳遞的資料 hwnd hwndreceived 程序b的接收資料視窗...

程序間通訊

最近做專案遇到奇怪的問題,我在主線程中建立乙個工作執行緒。在工作執行緒中用sendmessage向主線程傳送訊息,通知主線程操作office 物件。getactiveobject時提示 hr 0x8001010d 因為應用程式正在傳送乙個輸入同步呼叫,所以無法執行傳出的呼叫。我把sendmessag...