zoukankan      html  css  js  c++  java
  • select、poll、epoll模型对比

      select、poll、epoll模型对比

         先说Select:
               1.Socket数量限制:该模式可操作的Socket数由FD_SETSIZE决定,内核默认32*32=1024.
               2.操作限制:通过遍历FD_SETSIZE个Socket来完成调度,不管哪个Socket是活跃的,都遍历一遍.

          后说Poll:
             1.Socket数量几乎无限制:该模式下的Socket对应的fd列表由一个数组来保存,大小不限(默认4k).
             2.操作限制:同Select.

          再说:Epoll:
            1.Socket数量无限制:同Poll
            2.操作无限制:基于内核提供的反射模式,有活跃Socket时,内核访问该Socket的callback,不需要遍历轮询.

         总体来说:
           大部分情况下,反射的效率都比遍历来的高,但是!
          但是当所有Socket都活跃的时候,反射还会更高么?这时候所有的callback都被唤醒,会导致资源的竞争.既然都是要处理所有的Socket,那么遍历是最简单最有效的实现方式.

        举例来说:
          对于IM服务器,服务器和服务器之间都是长链接,但数量不多,一般一台6070个,比如采用ICE这种架构设计,但请求相当频繁和密集,这时候通过反射唤醒callback不一定比用select   去遍历处理更好.
          对于web portal服务器,都是浏览器客户端发起的http短链接请求,数量很大,好一点的网站动辄每分钟上千个请求过来,同时服务器端还有更多的闲置等待超时 的Socket,这时候没必要把全部的Socket都遍   历处理,因为那些等待超时的请求是大多数的,这样用Epoll会更好.

       

  • 相关阅读:
    Xcode7 真机调试步骤以及遇到的问题解决办法
    AndroidStudio .gitinore编写
    Android Studio Jar、so、library项目依赖
    Android studio导入eclipse项目混淆打包出错
    spring中ref属性与<ref/>标签
    NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.web.servlet.view.InternalResourceViewResolver' available
    Maven学习笔记
    Tomcat日志与Log4j日志
    Git笔记
    Tomcat学习
  • 原文地址:https://www.cnblogs.com/-zyj/p/5727053.html
Copyright © 2011-2022 走看看