akae-network-programming-models-2011.09.06.pdf

akae-network-programming-models-2011.09.06.pdf

ID:33739013

大小:879.59 KB

页数:46页

时间:2019-02-28

akae-network-programming-models-2011.09.06.pdf_第1页
akae-network-programming-models-2011.09.06.pdf_第2页
akae-network-programming-models-2011.09.06.pdf_第3页
akae-network-programming-models-2011.09.06.pdf_第4页
akae-network-programming-models-2011.09.06.pdf_第5页
资源描述:

《akae-network-programming-models-2011.09.06.pdf》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、I/O模型与调度模型杨劲松yjs@oldhand.org2011.09.06参考资料◆W.RichardStevens《UNIX网络编程》(第1卷)◆W.RichardStevens《TCP/IP详解》(第1卷)◆W.Richardstevens《UNIX环境高级编程》◆EricS.Raymond《UNIX编程艺术》2http://www.akaedu.org09/06/11学习方法(建议)◆参考W.RichardStevens《TCP/IP详解》(卷一)◆阅读相关的RFC文档◆动手实践●使用tcpdump分析数据包●使用wireshark分析数据包3http://www.aka

2、edu.org09/06/111.I/O模型◆系统I/O与服务器模型◆阻塞I/O模型◆非阻塞I/O模型◆多路复用I/O模型◆信号驱动I/O模型◆异步I/O模型◆I/O模型比较4http://www.akaedu.org09/06/111.1系统I/O与服务器模型◆在UNIX/Linux下有5种I/O模型:●阻塞I/O:◇最常用、最简单、效率最低●非阻塞I/O:◇可防止进程阻塞在I/O操作上●I/O多路复用:◇允许同时对多个I/O进行控制●信号驱动I/O:◇当某个描述符字上发生了某个事件时,让内核通过信号SIGIO通知进程●异步I/O5http://www.akaedu.org09

3、/06/111.2阻塞IO模型◆阻塞I/O模式是最普遍使用的I/O模式,大部分程序使用的都是阻塞模式的I/O。◆缺省情况下,套接字建立后所处于的模式就是阻塞I/O模式。◆前面学习的很多读写函数在调用过程中会发生阻塞●读操作中的read()/readv()/recv()/recvfrom()/recvmsg()●写操作中的write()/writev()/send()/sendto()/sendmag()●另外:accept()/connect()6http://www.akaedu.org09/06/111.2.1阻塞I/O模型7http://www.akaedu.org09/0

4、6/111.2.2读阻塞◆以read()为例:●进程调用read()从套接字上读取数据,当套接字的接收缓冲区中还没有数据可读,函数read()将发生阻塞。●它会一直阻塞下去,等待套接字的接收缓冲区中有数据可读。●经过一段时间后,缓冲区内接收到数据,于是内核便去唤醒该进程,通过read()访问这些数据。●如果在进程阻塞过程中,对方发生故障,那这个进程将永远阻塞下去。8http://www.akaedu.org09/06/111.2.3写阻塞◆在写操作时发生阻塞的情况要比读操作少。主要发生在要写入的缓冲区的大小小于要写入的数据量的情况下。◆这时,写操作不进行任何拷贝工作,将发生阻塞。

5、◆一量发送缓冲区内有足够的空间,内核将唤醒进程,将数据从用户缓冲区中拷贝到相应的发送数据缓冲区。◆UDP不用等待确认,没有实际的发送缓冲区,所以UDP协议中不存在发送缓冲区满的情况,在UDP套接字上执行的写操作永远都不会阻塞。9http://www.akaedu.org09/06/111.3非阻塞I/O模型◆当我们将一个套接字设置为非阻塞模式,我们相当于告诉了系统内核:“当我请求的I/O操作不能够马上完成,你想让我的进程进行休眠等待的时候,不要这么做,请马上返回一个错误给我。”◆当一个应用程序使用了非阻塞模式的套接字,它需要使用一个循环来不停地测试是否一个文件描述符有数据可读(称

6、做polling)。◆应用程序不停的polling内核来检查是否I/O操作已经就绪。这将是一个极浪费CPU资源的操作。◆这种模式使用中不是很普遍。10http://www.akaedu.org09/06/111.3.1非阻塞I/O模型11http://www.akaedu.org09/06/111.3.2非阻塞I/O调度过程EAGAINEAGAIN读到数据read返read返read返回回回readreadread多次调用用户态read核心态套接套接套接字缓字缓字缓……冲区中数冲区冲区据到达,中没中没进行数据有数有数复制据据12http://www.akaedu.org09/06

7、/111.4多路复用IO◆应用程序中同时处理多路输入输出流,若采用阻塞模式,将得不到预期的目的;◆若采用非阻塞模式,对多个输入进行轮询,但又太浪费CPU时间;◆若设置多个进程,分别处理一条数据通路,将新产生进程间的同步与通信问题,使程序变得更加复杂;◆比较好的方法是使用I/O多路复用。其基本思想是:●先构造一张有关描述符的表,然后调用一个函数,它要到这些描述符中的一个已准备好进行I/O时才返回。●返回时,它告诉进程那个描述符已准备好可以进行I/O。13http://www.aka

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
相关文章
更多
相关标签