【Java】進程間通訊

http://blog.csdn.net/legend_x/article/details/19558253java

    進程間通訊技術包括消息傳遞、同步、共享內存和遠程過程調用。linux

1. 共享內存:公共緩存區(解決:如何共享;互斥)

2. 消息機制(郵局)

(1)消息緩衝通訊

根據」生產者-消費者」原理,利用內存中公用消息緩衝區實現進程之間的信息交換。數據庫

開闢了若干消息緩衝區,用以存放消息.每當一個進程向另外一個進程發送消息時,便申請一個消息緩衝區,並把已準備好的消息送到緩衝區,而後把該消息緩 衝區插入到接收進程的消息隊列(臨界區,讀寫分開)中,最後通知接收進程.接收進程收到發送里程發來的通知後,從本進程的消息隊列中摘下一消息緩衝區,取出所需的信息,而後把 消息緩衝區不按期給系統.系統負責管理公用消息緩衝區以及消息的傳遞。緩存

數據結構:消息長度、消息正文、發送者、消息隊列指針 。服務器

變量及方法:數據結構

(1)消息隊列首指針m-q,通常保存在PCB中。 
(2) 互斥信號量m-mutex,初值爲1,用於互斥訪問消息隊列,在PCB中設置。 
(3) 同步信號量m-syn,初值爲0,用於消息計數,在PCB中設置。 
(4) 發送消息原語send 
(5) 接收消息原語receive(a) app

(2)信箱通訊(通訊機構,發送接收信件)

數據結構socket

1. 信箱說明函數

可存信件數spa

已有信件數

可存信件的指針

必須提供相應的原語,如建立信箱原語、撤消信箱原語、發送信件原語和接收信件原語等。 

好處:發送方和接收方沒必要直接建聯繫,沒有處理時間上的限制。發送方能夠在任什麼時候間發信,接收方也能夠在任什麼時候間收信。

(1)若發送信件時信箱已滿,則發送進程應被置等信箱狀態,直到信箱有空時才被釋放。 
(2)若取信件時信箱中無信,則接收進程應被子置成等信件狀態,直到有信件時才被釋放。 

2. 信箱體

(3)管道通訊(文件通訊、數據庫)

首先出如今UNIX操做系統中。做爲UNIX的一大特點,因爲管道通訊的有效性,一些系統繼UNIX以後相繼引入了管道技術,管道通訊是一種重要的通訊方式。 

所謂管道,就是鏈接在兩個進程之間的一個打開的共享文件,專用於進程之間進行數據通訊。發送進程能夠源源不斷地從管道一端寫入數據流,每次寫入的長度是可 變的;接收進程在須要時能夠從管道的另外一端讀出數據,讀出單位長度也是可變的。顯然,管道通訊的基礎是文件系統。同步互斥有操做系統自動進行,對用戶透明。

優勢:傳送數據量大;缺點:慢。

pipe:進程間要有聯繫

named pipe:進程間獨立,可是Java沒有。

(4)socket:可實現機器間通訊,套接口

(5)Internet通訊

(6)RPC:遠程過程調用,不多使用,因其與UNIX的RPC不兼容. 

(7)串行/並行通訊(Serial/Parallel Communication) :它容許應用程序經過串行或並行端口與其餘的應用程序通訊。

(8)系統消息:使用底層Windows API

(9)MSMQ消息服務器

(10)COM/DCOM經過COM系統的代理存根方式進行進程間數據交換,但只可以表如今對接口函數的調用時傳送數據,經過DCOM能夠在不一樣主機間傳送數據.

 

 

 


http://blog.csdn.net/Blues1021/article/details/44336797?ref=myread

主要的 IPC 方法

方法

提供方(操做系統或其餘環境)

文件

多數操做系統

信號

多數操做系統

Socket

多數操做系統

消息隊列(en:Message queue)

多數操做系統

管道(en:Pipe)

全部的 POSIX systems, Windows.

具名管道(en:Named Pipe)

全部的 POSIX 系統, Windows.

信號量(en:Semaphore)

全部的 POSIX 系統, Windows.

共享內存

全部的 POSIX 系統, Windows.

Message passing(en:Message passing)
(
不共享)

用於 MPI規範,Java RMI, CORBA, MSMQ, MailSlot 以及其餘.

Memory-mapped file(en:Memory-mapped file)

 

linux下進程間通訊的幾種主要手段簡介(也適用於winldows平臺):

  1. 管道(Pipe)及有名管道(named pipe):管道可用於具備親緣關係進程間的通訊,有名管道克服了管道沒有名字的限制,所以,除具備管道所具備的功能外,它還容許無親緣關係進程間的通訊
  2. 信號(Signal):信號是比較複雜的通訊方式,用於通知接受進程有某種事件發生,除了用於進程間通訊外,進程還能夠發送信號給進程 自己;linux除了支持Unix早期信號語義函數sigal外,還支持語義符合Posix.1標準的信號函數sigaction(實際上,該函數是基於 BSD的,BSD爲了實現可靠信號機制,又可以統一對外接口,用sigaction函數從新實現了signal函數);
  3. 報文(Message)隊列(消息隊列):消息隊列是消息的連接表,包括Posix消息隊列system V消息隊列。有足夠權限的進程能夠向隊列中添加消息,被賦予讀權限的進程則能夠讀走隊列中的消息。消息隊列克服了信號承載信息量少,管道只能承載無格式字 節流以及緩衝區大小受限等缺點。
  4. 共享內存:使得多個進程能夠訪問同一塊內存空間,是最快的可用IPC形式。是針對其餘通訊機制運行效率較低而設計的。每每與其它通訊機制,如信號量結合使用,來達到進程間的同步及互斥。這段共享內存由一個進程建立,但多個進程均可以訪問。只能用於同一機器。
  5. 信號量(semaphore):主要做爲進程間以及同一進程不一樣線程之間的同步手段。嚴格來講不是一種獨立的進程間通訊方式。計數器。鎖機制。
  6. 套接口(Socket):更爲通常的進程間通訊機制,可用於不一樣機器之間的進程間通訊。起初是由Unix系統的BSD分支開發出來的,但如今通常能夠移植到其它類Unix系統上:Linux和System V的變種都支持套接字。

http://blog.csdn.net/feeltouch/article/details/9771183

  1. (1.文件和命名管道消耗操做多。2.文件和共享內存是無鏈接的3.命名管道和共享內存只能在本機中使用4.使用共享內存和文件要比使用管道麻煩,要處理競態。)
相關文章
相關標籤/搜索