【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】