p o l l 方 法 的 基 本 概 念.pdfVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
详细说说select poll epoll (以下内容来自网络和自己的总结,再次感谢网络中的大神们提 供的见解) 在探索select poll? epoll 之前我们首先要知道什么叫多路复用: 下来探索一下为什么会用到多路复用: 首先我们看看一个客户端请求服务器的完整过程。首先,请求过 来,要建立连接,然后再接收数据,接收数据后,再发送数据。 具体到系统底层,就是读写事件,而当读写事件没有准备好时, 必然不可操作,如果不用非阻塞的方式来调用,那就得阻塞调用了, 事件没有准备好,那就只能等了,等事件准备好了,你再继续吧。阻 塞调用会进入内核等待,cpu 就会让出去给其他进程使用了,你可能 会说那么加进程数呀,当读写事件十分多的时候会创建很多的进程, 此时进程的上下文切换会占用过多的cpu 资-源。有人会说那么用线 程,其实线程的上下文切换也会占用过多资-源,而且还会引入线程 之间同步和互斥的问题,因为线程之间看到的是同一块内存资-源。 所以我么就会思考能不能用一个进程来查看很多的IO 事件,比如 每一个人都在钓鱼每一个鱼上钩都比做是一个事件发生的话,那么一 百个事件发生你可以让一百个人在那里一人拿一个鱼竿进行钓鱼, 自己负责进行鱼的收集。此时如果没有鱼上钩,那一百个人就在那阻 塞等待,你自己为了收鱼也在空闲着。这里的你自己可以比作 CPU, 一般个人可以比作多个进程,此时如果不是所有鱼都上钩,你就十分 空闲 其他人也在那拿着鱼竿空闲等待着,如果同时有多个鱼上钩了, 多个人会像你汇报,此时汇报的顺序问题就是形成混乱。此时我们可 以进行一下改进,比如专门找一个人拿着许多鱼竿,当一个鱼竿上的 鱼上钩以后再拉起鱼竿,这样节约了人力,还解决了问题。 下来讲一个真实的故事吧: 假设你是一个机场的空管, 你需要管理到你机场的所有的航线, 包括进港,出港, 有些航班需要放到停机坪等待,有些航班需要去 登机口接乘客。 你会怎么做? 最简单的做法,就是你去招一大批空管员,然后每人盯一架飞机, 从进港,接客,排位,出港,航线监控,直至交接给下一个空港,全 程监控。 那么问题就来了: 很快你就发现空管塔里面聚集起来一大票的空管员,交通稍微 繁忙一点,新的空管员就已经挤不进来了。 空管员之间需要协调,屋子里面就1, 2 个人的时候还好,几十 号人以后 ,基本上就成菜市场了。 空管员经常需要更新一些公用的东西,比如起飞显示屏,比如 下一个小时后的出港排期,最后你会很惊奇的发现,每个人的时间最 后都花在了抢这些资-源上。 (线程之间资-源共享) 现实上我们的空管同时管几十架飞机稀松平常的事情,他们怎么 做的呢? 他们用这个东西 这个东西叫 flight progress strip. 每一个块代表一个航班, 不同的槽代表不同的状态,然后一个空管员可以管理一组这样的块 (一组航班),而他的工作,就是在航班信息有新的更新的时候,把 对应的块放到不同的槽子里面。 这个东西现在还没有淘汰哦,只是变成电子的了而已。。 是不是觉得一下子效率高了很多,一个空管塔里可以调度的航线 可以是前一种方法的几倍到几十倍。 如果你把每一个航线当成一个Sock(I-O 流), 空管当成你的服务 端Sock 管理代码的话. 第一种方法就是最传统的多进程并发模型 (每进来一个新的 I-O 流会分配一个新的进程管理。) 第二种方法就是I-O 多路复用 (单个线程,通过记录跟踪每个I-O 流(sock)的状态,来同时管理多个I-O 流 。) 其实“I-O 多路复用”这个坑爹翻译可能是这个概念在中文里面 如此难理解的原因。所谓的 I-O 多路复用在英文中其实叫 I-O multiplexing. 如果你有哪些信誉好的足球投注网站multiplexing 啥意思,基本上都会出这 个图: 于是大部分人都直接联想到一根网线,多个 sock 复用 这个概 念,包括上面的几个回答,其实不管你用多进程还是I-O 多路复用, 网线都只有一根好伐。多个Sock 复用一根网线这个功能是在内核+ 驱动层实现的。 重要 的事情再说一遍 : I-O multiplexing 这里面 的 multiplexing 指的其实是在单个线程通过记录跟踪每一个Sock(I-O 流)的状态(对应空管塔里面的Fight progress strip 槽)来同时管理 多个I-O 流. 发

文档评论(0)

134****3224 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档