【http://blog.csdn.net/legend_x/article/details/19558253】java
進程間通訊技術包括消息傳遞、同步、共享內存和遠程過程調用。linux
根據」生產者-消費者」原理,利用內存中公用消息緩衝區實現進程之間的信息交換。數據庫
開闢了若干消息緩衝區,用以存放消息.每當一個進程向另外一個進程發送消息時,便申請一個消息緩衝區,並把已準備好的消息送到緩衝區,而後把該消息緩 衝區插入到接收進程的消息隊列(臨界區,讀寫分開)中,最後通知接收進程.接收進程收到發送里程發來的通知後,從本進程的消息隊列中摘下一消息緩衝區,取出所需的信息,而後把 消息緩衝區不按期給系統.系統負責管理公用消息緩衝區以及消息的傳遞。緩存
數據結構:消息長度、消息正文、發送者、消息隊列指針 。服務器
變量及方法:數據結構
(1)消息隊列首指針m-q,通常保存在PCB中。
(2) 互斥信號量m-mutex,初值爲1,用於互斥訪問消息隊列,在PCB中設置。
(3) 同步信號量m-syn,初值爲0,用於消息計數,在PCB中設置。
(4) 發送消息原語send
(5) 接收消息原語receive(a) app
數據結構socket
1. 信箱說明函數
可存信件數spa
已有信件數
可存信件的指針
必須提供相應的原語,如建立信箱原語、撤消信箱原語、發送信件原語和接收信件原語等。
好處:發送方和接收方沒必要直接建聯繫,沒有處理時間上的限制。發送方能夠在任什麼時候間發信,接收方也能夠在任什麼時候間收信。
(1)若發送信件時信箱已滿,則發送進程應被置等信箱狀態,直到信箱有空時才被釋放。
(2)若取信件時信箱中無信,則接收進程應被子置成等信件狀態,直到有信件時才被釋放。
2. 信箱體
首先出如今UNIX操做系統中。做爲UNIX的一大特點,因爲管道通訊的有效性,一些系統繼UNIX以後相繼引入了管道技術,管道通訊是一種重要的通訊方式。
所謂管道,就是鏈接在兩個進程之間的一個打開的共享文件,專用於進程之間進行數據通訊。發送進程能夠源源不斷地從管道一端寫入數據流,每次寫入的長度是可 變的;接收進程在須要時能夠從管道的另外一端讀出數據,讀出單位長度也是可變的。顯然,管道通訊的基礎是文件系統。同步互斥有操做系統自動進行,對用戶透明。
優勢:傳送數據量大;缺點:慢。
pipe:進程間要有聯繫
named pipe:進程間獨立,可是Java沒有。
(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平臺):
【http://blog.csdn.net/feeltouch/article/details/9771183】