- 1、本文档共40页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
目录 I/O模型 I/O复用概述 Select函数 套接字选项和fcntl 非阻塞I/O 信号驱动I/O模型 I/O模型 linux下可用的i/o模型 阻塞i/o 非阻塞i/o i/o复用(select和poll) 信号驱动i/o(SIGIO) 异步i/o(posix.1的aio_系列函数) 举例:输入操作的不同i/o模型 一个输入操作一般有两个阶段 等待数据准备好 从内核到进程拷贝数据 阻塞I/O模型 最流行的i/o模型。缺省时,所有套接字都是阻塞的。 非阻塞I/O模型 当把一个套接字设置成非阻塞方式时,即通知内核:当请求的i/o操作不能马上完成时,不要阻塞进程,而应返回一个错误。 I/O复用模型 i/o复用模型调用select或poll,进程阻塞于这两个系统调用上,而不是阻塞于真正的i/o系统调用上。 信号驱动I/O模型 让内核在描述字准备好时用信号SIGIO通知进程。这种模型的好处是当等待数据报到达时,可以不阻塞。前提是允许套接口进行信号驱动i/o 。 异步I/O模型 异步i/o让内核启动操作,并在整个操作完成后(包括将数据从内核拷贝到应用进程的缓冲)通知我们。 五个I/O模型的比较 fcntl函数 fcntl()是标准系统调用,原意是用于对文件描述字进行各种控制操作,但后来可利用它对任何描述字进行控制操作,包括对套接字描述字。 #include fcntl.h int fcntl(int fd, int cmd, … /* int arg */); 每个描述字都有一组由命令F_GETFL取得和由命令F_SETFL设置的文件标志。 fcntl函数(续) 函数fcntl提供了以下关于网络编程的特性: 非阻塞i/o。我们可以通过F_SETFL命令设置O_NONBLOCK来设置套接字为非阻塞型; fcntl函数(续) 用fcntl来使能非阻塞i/o的典型代码: int flags; if ((flags = fcntl(fd, F_GETFL, 0)) 0) err_sys(“…”); flags |= O_NONBLOCK; //保留原始状态 if ((flags = fcntl(fd, F_SETFL, flags)) 0) err_sys(“…”); 关闭非阻塞标志方法: flags = ~O_NONBLOCK; //恢复为原始状态 if (fcntl(fd, F_SETFL, flags) 0) err_sys(“…”); 非阻塞I/O 缺省情况下,套接字是阻塞方式的。可能阻塞的套接字调用分成以下四类: 输入操作:read, readv, recv, recvfrom和recvmsg函数。如果在一个阻塞的tcp套接字上调用这些函数,而且在套接字接收缓冲区中没有数据(或者没有满足条件的数据),进程将在数据到来前睡眠。到来的数据可以是一个字节,也可以是一个tcp分节。阻塞udp套接字将在一个udp数据报到来之前一直处于睡眠状态(在没有设置接收超时的前提下)。(但,在一个非阻塞套接字上,如果输入操作不能被满足,它们会立即返回一个EWOULDBLOCK错误)。 非阻塞I/O(续) 输出操作:write, writev, send, sendto和sendmsg函数。当tcp阻塞套接字从应用进程缓冲区向套接字发送缓冲区拷贝数据,如果发送缓冲区没有空间,进程会一直睡眠到腾出空间(没有设置超时)。对于一个非阻塞套接字而言,上述情况会立即返回一个EWOULDBLOCK错误。由于udp套接字没有发送缓冲区,内核只是拷贝应用进程数据并将其向协议栈下层传递。因此在一个阻塞udp套接字上的输出操作并不会阻塞。 接收外来的连接:accept函数。如果在一个阻塞套接字上调用accept函数,而且没有新的连接,进程会进入睡眠状态(没有设置超时)。如果在一个非阻塞套接字上调用accept,而且没有新的连接,将返回EWOULDBLOCK错误。 非阻塞I/O(续) 初始化外出的连接:用于tcp的connect函数(udp尽管也可以connect,但不是建立一个真正的连接,而仅仅是让内核保存对方的IP和端口号),tcp的连接建立总会使调用进程阻塞起码到服务器的一次往返时间RTT。如果在一个非阻塞的tcp套接字上调用connect,而且连接不能马上建立,连接的建立过程将开始,但返回一个EINPROGRESS错误。 I/O复用概述 问题:并发服务器为多个客户服务: 避免服务器的服务被阻塞,采用并发服务 并发服务器:创建多个描述字,多进程或线程提供服务,这种方法会增加开销。 为每个连接套接字提供一个单独的服务实体(进城或线程),有没有一种没有过多开销的方式呢? 一个服务实体,但能同时为多个连接提供服务? I/O复用的
您可能关注的文档
- 一位从事人文社会科学研究的陈教.ppt
- 奥体花城陈校长府邸室内设计方案.ppt
- 旅游管理针对不同客源对象的导游接待方法和艺术.ppt
- 文献检索与论文导写--Web_of_Science.ppt
- -生物处理---生物膜法.ppt
- 第三章选区的创建与编辑.ppt
- 《模拟电子技术基础(第版)》-基本放大电路.ppt
- 施工经验交流-工期管理.ppt
- maggie's_gartnavel癌症康复中心.ppt
- 实验_数据加密技术应用.ppt
- 2025年贵州工业职业技术学院高职单招高职单招英语2016-2024历年频考点试题含答案解析.docx
- 2025年西昌民族幼儿师范高等专科学校高职单招职业适应性测试近5年常考版参考题库含答案解析.docx
- 2025年西藏警官高等专科学校高职单招语文2018-2024历年参考题库频考点含答案解析.docx
- 2025年贵州工商职业学院高职单招职业技能测试近5年常考版参考题库含答案解析.docx
- 2025年贵州工商职业学院高职单招职业适应性测试近5年常考版参考题库含答案解析.docx
- 2025年贵州农业职业学院高职单招数学历年(2016-2024)频考点试题含答案解析.docx
- 2025年贵州工商职业学院高职单招高职单招英语2016-2024历年频考点试题含答案解析.docx
- 2025年贵州工商职业学院高职单招语文2018-2024历年参考题库频考点含答案解析.docx
- 2025年许昌职业技术学院高职单招数学历年(2016-2024)频考点试题含答案解析.docx
- 2025年许昌职业技术学院高职单招职业技能测试近5年常考版参考题库含答案解析.docx
最近下载
- 《幼儿园游戏化课程实施策略研究国内外文献综述》4300字.docx
- 高一人音版音乐教学:《欧洲与拉丁美洲音乐》教学设计.doc
- 电力机车制动机03.pptx VIP
- 电力机车制动机04.pptx VIP
- 四川省成都市成华区2022-2023学年九年级上学期期末化学试卷.docx VIP
- 2022-2023学年四川省成都市青羊区九年级上学期期末考试化学试卷含详解.pdf VIP
- 污水处理系统的防火防爆(必威体育精装版版).docx VIP
- 四川省成都市学校2023-2024学年九年级上学期期末化学试卷(含解析).pdf VIP
- 53天天练六年级数学下册课堂练(人教)附答案解析.doc
- 中考数学备考策略与方法.pptx VIP
文档评论(0)