文档章节

【Java】进程间通信

Z
 Zoe_2016
发布于 2016/12/01 20:45
字数 1754
阅读 167
收藏 1

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

    进程间通信技术包括消息传递、同步、共享内存和远程过程调用。

1. 共享内存:公共缓存区(解决:如何共享;互斥)

2. 消息机制(邮局)

(1)消息缓冲通信

根据”生产者-消费者”原理,利用内存中公用消息缓冲区实现进程之间的信息交换。

开辟了若干消息缓冲区,用以存放消息.每当一个进程向另一个进程发送消息时,便申请一个消息缓冲区,并把已准备好的消息送到缓冲区,然后把该消息缓 冲区插入到接收进程的消息队列(临界区,读写分开)中,最后通知接收进程.接收进程收到发送里程发来的通知后,从本进程的消息队列中摘下一消息缓冲区,取出所需的信息,然后把 消息缓冲区不定期给系统.系统负责管理公用消息缓冲区以及消息的传递。

数据结构:消息长度、消息正文、发送者、消息队列指针 。

变量及方法:

(1)消息队列首指针m-q,一般保存在PCB中。 
(2) 互斥信号量m-mutex,初值为1,用于互斥访问消息队列,在PCB中设置。 
(3) 同步信号量m-syn,初值为0,用于消息计数,在PCB中设置。 
(4) 发送消息原语send 
(5) 接收消息原语receive(a) 

(2)信箱通信(通信机构,发送接收信件)

数据结构

1. 信箱说明

可存信件数

已有信件数

可存信件的指针

必须提供相应的原语,如创建信箱原语、撤消信箱原语、发送信件原语和接收信件原语等。 

好处:发送方和接收方不必直接建联系,没有处理时间上的限制。发送方可以在任何时间发信,接收方也可以在任何时间收信。

(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.使用共享内存和文件要比使用管道麻烦,要处理竞态。)

 

本文转载自:

Z
粉丝 0
博文 36
码字总数 12725
作品 0
广州
私信 提问
【Java】留下没有基础眼泪的面试题

只有光头才能变强 本文力求简单讲清每个知识点,希望大家看完能有所收获 使用多线程时,不是多线程能提升程序的执行速度,使用多线程是为了更好地利用CPU资源! 程序在执行时,多线程是CPU通...

Java3y
2018/08/15
47
0
【Java】socket

可实现机器间通信,套接口/套接字。适用于多数操作系统。更为一般的进程间通信机制,可用于不同机器之间的进程间通信。起初是由Unix系统的BSD分支开发出来的,但现在一般可以移植到其它类Uni...

Zoe_2016
2016/12/01
5
0
20.进程与线程通信方式之间的差异

进程线程通信方式之间的差异 每个进程有自己的地址空间。两个进程中的地址即使值相同,实际指向的位置也不同。进程间通信一般通过操作系统的公共区进行。 同一进程中的线程因属同一地址空间,...

u014590757
2018/04/16
0
0
UNIX网络编程卷2进程间通信读书笔记汇总

UNIX网络编程卷2进程间通信读书笔记(一)—概述 http://blog.chinaunix.net/u/22935/article_52711_2.html UNIX网络编程卷2进程间通信读书笔记(二)—管道 (1) http://blog.chinaunix.ne...

长平狐
2012/09/03
247
0
进程间通讯的方式

管道( pipe ): 管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。 有名管道 (named pipe) :有名管道也是半双工的...

旋转木马-千里马
2015/12/29
20
0

没有更多内容

加载失败,请刷新页面

加载更多

入坑-双鹰咔哒C61016保时捷919赛车积木

原帖于ZDM首发 https://post.smzdm.com/p/amm53q8k/ 前几天 无意中逛ZDM 发现有条好价, C61016 标准版(无动力组件)狗东店家双十一活动, 原价249元, 现价219元, 还有199-100专享卷.到手119. ...

云逸清风
16分钟前
3
0
Centos7安装Redis5

一、安装gcc依赖 由于 redis 是用 C 语言开发,安装之前必先确认是否安装 gcc 环境(gcc -v),如果没有安装,执行以下命令进行安装 [root@localhost local]# yum install -y gcc  二、下载...

小致Daddy
17分钟前
5
0
软件开发和用户体验结合——Cresense和Symbio达成战略合作伙伴关系

软件开发和质量保证公司Symbio和用户体验设计机构Cresense达成战略合作伙伴关系。通过创新的软件开发和用户体验结合,打造以客户为核心的优质服务。 Symbio与Cresense已经合作多年。联合技术...

symbiochina88
23分钟前
5
0
Sass 简介

概念 Sass由hampton catlin设计,natalie weizenbaum于2006年开发,它可以免费下载和使用。 Sass是一个将脚本解析成CSS的脚本语言(SassScript),也是一款CSS预处理器,它减少了CSS的重复,...

凌兮洛
25分钟前
5
0
Java自学指南五、编码工具

工欲善其事,必先利其器... 想要高效率编码输出和快速处理文本,需要 熟悉编程语言的语法 盲打 至少需要熟练使用一种文本编辑器 至少熟练熟练使用一种 IDE (集成开发环境) 现实中,看到过二指...

ConstXiong
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部