第七章《IO复用与并行程序》.PDF

  1. 1、本文档共80页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第七章《IO复用与并行程序》

I/O复⽤与并⾏程序 并发与复⽤ • 回顾之前的程序(⽆论UDP/TCP) • 其⼀:单个Server,单个Client • 其⼆:单个Server,多个Client • 但客户端都是依次被服务器端受理并执⾏ • 函数是阻塞的,怎么办 • 两种类型的服务器端 • 第⼀种:第⼀个连接等待受理时间为0s,第50个等待受理时 间为50s,第100个连接等待受理时间为100s,依次类推。 每个连接服务时间仅1s • 第⼆种:所有连接请求的受理时间不超过1s,平均服务时间 越2-3s • 解决⽅案——并发服务器 • 多进程同时处理客户端的连接请求 • I/O复⽤的⽅式轮询客户端的连接请求 [单进程!] I/O复⽤-单进程的并发服务器实现 • ⽤多进程并发服务器的缺点 • 每次请求都需要创建新的进程,创建、维护进程需 要消耗运算和内存空间 • 进程独⽴存在,可能涉及数据交换 • 实现多进程的技术⼿段较复杂 • 不创建进程⽽实现并发服务器 • 同时向多个客户端提供服务,每个客户端不阻塞其 它客户端 • 复⽤(Multiplexing)技术 • 复⽤的思维被⽤在多个领域 • 不创建进程⽽实现并发服务器 • 复⽤(Multiplexing)技术 • [通信⼯程] 在同⼀个通信信道离传递多个数据 • [⽹络] 提⾼物理设备的效率,⽤最少的物理要素 传递最多的数据 • 通信中的多路复⽤(复⽤)模型 • 时分多路 • 频分多路 • 码分多路 • 空分多路 • “纸杯电话”的复⽤ Socket服务器上的复⽤ • 服务器端并发处理多个客户端的连接 • 需要建⽴多个进程/线程分别处理 • 引⼊复⽤技术,对服务器端的应⽤层程序进⾏复⽤ • 实现单个进程处理多个客户端的输⼊请求 • 我们称之为“I/O复⽤” • 具体来说,服务器端的I/O复⽤即: • 服务器的应⽤监测指定的客户端 • 若某客户端有请求产⽣,则处理 • 若客户端⽆请求产⽣,则略过 I/O复⽤的⼀个类⽐ • 上课回答问题 • ⽅式⼀:给每个学⽣配备⼀个⽼师,⼀对⼀,⼀旦 某学⽣有问题⽼师能⻢上处理,但是该学⽣没有问 题的时候⽼师必须等待 • ⽅式⼆:⼀个聪明的⽼师,多个学⽣,聪明的⽼师 周期性地扫视整个课堂,有举⼿的学⽣则点他起来 处理问题,没有的话就继续保持观测 select()函数 • 最具有代表性的实现复⽤服务器的⽅法 • 常被程序员忽略的⽅法 • winsock和BSD socket等等都有该⽅法(或其扩展) select()函数主要功能 • 将多个⽂件描述符集中在⼀起统⼀监视 • 是否存在套接字有待接收数据? • 是否存在套接字有(⽆阻塞的)待传输数据 • 是否存在套接字发⽣了异常 select()函数的⽤法 select()函数⽤法-步骤⼀ • 设置⽂件描述符 • select()可以同时监视多个⽂件描述符 • 注意⽂件描述符可以是stdio、⽂件、设备、socket等等 • ⽂件描述符被集中监视 • 维护⼀张表,表示同类的⽂件描述符 • 监视项也是分类的 • 待接收、待传输、发⽣异常 • 监视⽂件描述符的表(fd_set) • 如何定义与初始化 • 设置⼀个⽂件描述符的表fd_set ,结构如图 • ⼀个数组,每⼀位表示系统中的⼀个⽂件描述符, 如图第⼀位表示fd0 ,第三位表示fd2…… • 每位的元素可为0/1 • 若为0,表示select不监视此fd • 若为1,…… • 如何改变表中的数值。我们命名这个表为: fd_set set •

文档评论(0)

2105194781 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档