03-进程间通信

上传人:油条 文档编号:26987291 上传时间:2018-01-04 格式:PPT 页数:43 大小:252KB
返回 下载 相关 举报
03-进程间通信_第1页
第1页 / 共43页
03-进程间通信_第2页
第2页 / 共43页
03-进程间通信_第3页
第3页 / 共43页
03-进程间通信_第4页
第4页 / 共43页
03-进程间通信_第5页
第5页 / 共43页
点击查看更多>>
资源描述

《03-进程间通信》由会员分享,可在线阅读,更多相关《03-进程间通信(43页珍藏版)》请在金锄头文库上搜索。

1、第3章 进程间通信,第3章 进程间通信,引言Internet协议的API外部数据的表示和编码客户服务器通信组通信总结,引言,进程间的通信 在通信双方的进程维护着消息队列, 发 送进程将消息先放到发送方缓冲区,并 通过通信信道到达目的主机的接收的缓 冲区,接受进程从缓冲区取出数据。,引言,两个传输层的协议:UDP:进程间通信的最简单的形式。 每次发送一个独立的报文包,每个报 文包都带有目的地址。在不可靠的信 道上,消息可能丢失,或者因为网络 噪声破坏了报文的数据,UDP对此不 做处理。TCP:在进程之间提供一种双向的流 的抽象。信息流是一串没有边界的数 据项组成。可靠的传输协议,面向连 结,重发

2、,有序,拥塞控制。,第3章 进程间通信,引言Internet协议的API外部数据的表示和编码客户服务器通信组通信总结,Internet协议的API,进程间通信的特点:两种通信模式:同步通信:发送(send)操作和接收 (receive)操作是阻塞的。异步通信:发送操作是阻塞的,接收可以是阻塞的或者不是阻塞的。编程复杂,运行效率高。,Internet协议的API,什么情况下采用同步通信?如果下一条指令一定等IO完成,则必须 使用blocking的方式在要求CPU占用率较低,以及响应时间 较短的情况下,必须使用blocking方式。比如在VoIP软件电话中,接收语音数据包的IO操作就需要使用blo

3、cking的方式,因为 VoIP应用对IO操作的时延很敏感。,Internet协议的API,什么情况下采用异步通信?如果程序同时处理多个IO操作,或者除了IO操 作之外,还有其它的工作可做。那么使用 nonblocking的方式较好,这样使用的线程数 较少。在高性能的服务器中,由于需要同时响应数目 非常大的连接,无法为每一个连接都启动一个 线程。这种情况下,也需要使用nonblocking 的方式。例如,在嵌入式应用中,内存的容量十分有 限,对线程的数量也有严格要求的场合下, 就需要使用nonblocking的方式,让一个线 程处理多个IO工作。,Internet协议的API,一些常用的异步通

4、信的方法:1. 将需要等待的部分写在底层的类里面:对于send,底层向上提供调用的send接 口,上层调用了send后立即返回,实际消 息在底层类的发送队列中,由底层类中的 专门线程负责逐个发送消息。对receive,可以使用windows的消息机制, 如果单纯使用C+实现,则做成一个观察 者模式,上层模块把消息的处理类注册到 底层类中,消息到来后,由底层类调用高 层类的相应处理消息的方法。,Internet协议的API,2. 在UNIX Networking Programming Vol 1中介 绍了几种模式的I/O,有:使用select和poll调用来判断是否有数据可 用,然后再做rec

5、eiveSignal-Driven I/O Model:用户注册一个 信号处理的函数,每当有数据来时,系统 都会发送这个信号,用户进程在该信号处 理函数中进行接收数据的操作Asynchronous I/O Model:用户进行 receive调用之后,直接返回做别的事情。 系统将指定的数据接收到以后,发信号通 知用户进程进行处理,Internet协议的API,消息的目的地Internet address + local port(每个端口都有一个进程,一 个进程可以对应多个端口,任何一个进程只要知道端口 号,都可以发送消息。)服务器提供服务,对外公布端口号,然后守候消息的到来服务的名字:在运行

6、时借助于名字服务操作系统提供与位置无关的标识符对应底层的端口可靠性(Reliability)有效性:消息最终被传递到相应的进程,尽管会有一些丢 包现象发生。完整性:到达目的地的消息和发出的消息是完全一致的, 并且没有重复有序性(Ordering)接收消息的顺序和发送的顺序相同,Internet协议的API,Sockets进程间通信的端口两种通信协议 (UDP and TCP )使用 socket 抽象绑定到一个局部的端口 (216 possible port number) 和一个IP地址同一台机器上的进程不能共用一个端口号,Internet协议的API,UDP 报文通信无确认、无重发UDP

7、报文通信的特点Message size: 不大于 64k,多出的部分被截取blocking:non-blocking sends (如果到了接收端的消 息找不到对应的端口号,消息将被丢弃。Timeout: 接收端限制。Receive from any: 一个socket对发送端没有限制。,Internet协议的API,UDP 报文通信故障模型缺失故障:如果发现校验和不正确或和发送 双方缓冲区不够,会导致消息的丢失乱序故障:接收顺序和发送的顺序不一致。没有任意故障,无法保证有效性,但是可以 保证完整性。应用程序可以在UDP上实现可靠的通信有些应用可以容忍偶发的缺失故障,因此可 以得到更高的效率。

8、例如:DNS服务,音视频文件。,Internet协议的API,TCP流通信The API to the TCP提供一个字节流的抽象,其中可以写 数据和读数据这种通信模式隐含了以下的网络特征:不考虑消息的尺寸不考虑消息丢失的问题流控制消息的重复和乱序消息的目的地,Internet协议的API,TCP流通信与流通信相关的问题:数据项的匹配: 通信双方需要对流上传输的 数据内容达成一致阻塞:发送操作后被阻塞直到数据到达接收方 的缓冲区,接收操作被阻塞直到数据到达缓冲区线程:服务器每当收到一个连结的请求,它 创建一个线程。,Internet协议的API,TCP流通信的故障模型TCP协议保证可靠通信所要

9、求的完整性 和有效性。连结可能会由于一些未知的故障遭到破 坏。无法区分是网络故障还是进程的故障无法知道最近发出去的消息是否被接 收端收到,第3章 进程间通信,引言Internet协议的API外部数据的表示和编码客户服务器通信组通信总结,外部数据的表示和编码,为什么需要外部数据表示和编码?不同计算机上的数据格式不一样e.g., big-endian/little-endian integer order, ASCII (Unix) / Unicode character coding两台计算机如何交换数据?有一个统一的外部形式发送时:本地表示-外部表示;接收时:外部形式-本地表示专程数据按本地格

10、式发送,并附有格式说明,接 收端如果发现和自己的格式不一致,则做相 应的转换。,外部数据的表示和编码,外部数据表示一个统一的标准,规定数据结构和基本 数据的表示形式编码/解码(Marshalling/unmarshalling)用途:数据传输和保存三种外部编码方法CORBAs common data representationJavas object serializationXML,外部数据的表示和编码,CORBAs Common Data Representation(CDR)规定了所有在CORBA远程调用中可能用 到的参数和返回值类型的数据的表示格 式15 primitive type

11、sShort (16bit), long(32bit), unsigned short, unsigned long, float, char, ,外部数据的表示和编码type representationSequence Length(unsigned) followed by elements in orderstring Length(unsigned long) followed by characters in order(can also have wide characters)array Array elements in order(no length specified b

12、ecause it is fixed)structIn the order of declaration of the componentsenumerated Unsigned long(the value are specified by the order declared)union Type tag followed by the selected member,StructPerson 外部数据的表示和编码string namCORBA CDR message string placlong year;index in notes sequence of bytes 4 bytes

13、 on representation03 5 length of string47 Smit Smith811 h_12156 length of string1619Lond London20-23 on_2427 unsigned long1934 flattened form represents a Personstruct with value: Smith, London, 1934,外部数据的表示和编码,Java对象的序列化Serialization(deserialization)将一个对象表示成扁平的形式(flattening)或将对各对象串行化,便于存储和传输包含对象的类的

14、信息以及版本信息句柄(Handles): 对象的指针序列化 时处理成句柄每个对象只被编码一次,外部数据的表示和编码,Public class Person implementsSerializable private String name;private String place;private int year;public Person (String aName, String aPlace, int aYear)name = aName;place = aPlace;year = aYear;/ followed by methods for accessing the instan

15、ce variables Person p = new Person(“Smith”, “London”, 1934);Serialized values ExplanationPerson 8-byte version number h0 class name, version numberjava.lang.String java.lang.String number, type and name of 3 int yearname: place: instance variables 1934 5 Smith 6 London h1 values of instance variable

16、sThe true serialized form contains additional type markers; h0 and h1 are handles,第3章 进程间通信,引言Internet协议的API外部数据的表示和编码客户服务器通信组通信总结,客户服务器通信,public byte doOperation (RemoteObjectRef o, int methodId, byte arguments)向远程对象发送请求消息,返回应答.参数:远程对象引用,方法的ID,方法所需 要的参数public byte getRequest ();在服务器的端口获得客户的请求.public void sendReply (byte reply, InetAddress clientHost, int clientPort);将结果返回到客户端的端口上。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号