2010-09-18 56 views
1

斐伊川,使用IPC爲不同的系統

有人問我這個問題,在最近的一次採訪中對這些,我沒有回答,因爲我是比較新的IPC。

如果進程位於不同的系統上,您將如何使用IPC?

+1

套接字和消息傳遞是第一個想到的.. – 2010-09-18 16:03:11

回答

3

IPC只是意味着進程間通信。有很多方法可以進行通信,如果兩個進程在同一臺機器上是本地的,那麼真的沒有區別。

如果您正在通過計算機進行交談,某些表單對您而言不可用,例如共享內存,信號,管道,內存映射文件或信號量。 (如果你真的想走那條路線,那麼中間件可以模擬共享內存)。

一些比較常用的方法有:

文件大多數操作系統。
信號大多數操作系統;某些系統(如Windows)只能在C運行時庫中實現信號,並且實際上不支持將它們用作IPC技術。
套接字大多數操作系統。
消息隊列大多數操作系統。
管道所有POSIX系統,Windows。
命名管道所有POSIX系統,Windows。
信號量所有POSIX系統,Windows。
共享內存所有POSIX系統,Windows。
消息傳遞 (無共享)用於MPI範例,Java RMI,CORBA,MSMQ,MailSlots等。
內存映射文件所有POSIX系統,Windows。如果使用臨時文件,此技術可能會帶來競爭狀態風險。

編輯:此列表取自Wikipedia。該清單與任何一樣好。

+0

除非你寫了[關於IPC的維基百科文章](http://en.wikipedia.org/wiki/Inter-process_communication),這個列表是公然複製的。 – 2012-08-09 17:54:15

0

IPC是一個抽象術語,它表示駐留在相同或不同系統上的進程之間的任何進程間通信。

如果在不同系統上有進程,最明顯的是基於TCP的通信,包括使用TCP作爲傳輸的IPC工具。但當然這不是交換信息的唯一方式。

0

IPC是進程間通信,更多的是在一臺機器上共享不同進程間數據的技術,數據通過綁定不同進程的耦合。

  • 第一,是使用存儲器映射技術,在其中創建的存儲器映射,和其他人打開讀/寫存儲器映射...
  • 第二種是,使用套接字,以彼此通信...這有很高的開銷,因爲每個進程將不得不打開插座,進行通信...儘管有效
  • 第三種方法是使用管道或命名管道,可以找到一個很好的示例here

有併發症,例如,如果一個進程是用一種語言的東西,寫在另一其他的過程中,你如何保證數據流是兼容的每個進程讀取,你可以使用谷歌的協議緩衝區,以處理this,有一個.NET版本可用,here

雖然在不同程度上,IPC機制僅是一個域內的透明和工作,如Windows,以在Windows,Linux到Linux,你可能能夠與Windows這樣做Linux或反之亦然,儘管必須小心謹慎,因爲API差異和功能性決定了數據傳輸編碼方案的協議結果。

+0

我可以問一下,提醒一下,如果不留言,它是無知的嗎?解釋爲什麼? – t0mm13b 2010-09-18 17:03:01

+0

我沒有投票給你 - 但你的答案顯然是錯誤的。 IPC不用於在一臺機器中共享數據。大多數中間件的目的是啓用跨機器和同一臺機器的通信。應用程序位置在許多IPC機制中是獨立的。大多數中間件軟件包爲您處理跨語言和跨CPU架構。操作系統在許多機制中也是透明的。這個想法是簡單地選擇一個在你擁有的約束範圍內工作的。有很多選擇,你可以在我的帖子中看到。 – 2010-09-19 01:40:57