`

【转】 Epoll,Poll,Select模型比较

 
阅读更多

目前看到的解释的最透彻又最短小的一篇,赞

 

http://www.iteye.com/topic/469644

 

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

分享到:
评论

相关推荐

    select poll epoll 代码实例

    select poll epoll 代码实例

    libevent for qt网络模块,直接替换qt的select模型,支持epoll,select,pool.使用非常简单,无需修改以前的代码结构

    最近在开发im服务器 需要大并发链接 QT默认的是使用select模型的 这种轮询方式非常慢 在高并发连接 我们需要epoll才能发挥linux服务器的性能 而且使用简单 整个服务端代码架构无需修改 直接可以使用 只要在 main...

    本项目包括利用多线程、select、poll以及epoll实现的并发处理连接请求

    有三个方式select、poll、epoll。 select:将文件描述符放入一个集合中,调用select时,将这个集合从用户空间拷贝到内核空间(缺点:每次都要复制,开销大),由内核根据就绪状态修改该集合的内容。 poll:和select...

    多路并发情况下的CS模型实例 select poll epoll

    多路并发情况下的CS模型实例 select poll epoll

    epoll/iocp 比较

    关于epoll iocp select等网络模型运行实例代码

    基于select、poll、epoll的区别详解

    linux提供了select、poll、epoll接口来实现IO复用,三者的原型如下所示,本文从参数、实现、性能等方面对三者进行对比。 代码如下: int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, ...

    EPOLL模型详解

    在一些 benchmark中,如果所有的socket基本上都是活跃的---比如一个高速LAN环境,epoll并不比select/poll有什么效率,相 反,如果过多使用epoll_ctl,效率相比还有稍微的下降。但是一旦使用idle connections模拟WAN...

    EPOLL模型:关于并发连接的处理

    Linux 2.6内核中提高网络I/O性能的新方法-epoll I/O多路复用技术在比较多的TCP网络服务器中有使用,即比较多的用到select函数。 1、为什么select落后  首先,在Linux内核中,select所用到的FD_SET是有限的,即内核...

    linux epoll模型

    在这里最重要的莫过于select模型和Asynchronous I/O模型。从理论上说,AIO似乎是最高效的,你的IO操作可以立即返回,然后等待os告诉你IO操作完成。但是一直以来,如何实现就没有一个完美的方案。最著名的windows完成...

    要解决socket tcp C10K问题,传统的多线程模式和select模式都不再适用,应采用epoll,kqueue,dev_poll来捕获IO事件.zip

    要解决C10K问题,传统的多线程模式和select模式都不再适用,应采用epoll,kqueue,dev_poll来捕获IO事件.zip

    linux epoll机制详解

    select()和poll() IO多路复用模型 select的缺点: 1.单个进程能够监视的文件描述符的数量存在最大限制,通常是1024,当然可以更改数量,但由于select采用轮询的方式扫描文件描述符,文件描述符数量越多,性能越差...

    linux网络编程

    17socket编程(十二) select限制 poll 18socket编程(十三) epoll使用 epoll与select、poll区别 epoll LT/ET模式 19socket编程(十四) UDP特点 UDP客户/服务基本模型 UDP回射客户/服务器 UDP注意点 20socket编程...

    socket网络编程-epoll-水平触发和边缘触发源码

    (2)epoll技术的性能,可以说非常惊艳,它是能够使单台计算机支撑数百万甚至数十万上百万并发的核心技术,远优于其他I/O模型或I/O函数(如select、poll函数),select和poll这类技术因为系统内部实现问题,当并发...

    udp多路IO模型.zip

    select,poll,epoll都是IO多路复用的机制,可以监测多个描述符,当某个或多个描述就绪,能够通知程序进行相应的读写行为。本demon是基于linux下udp通信实现,源码包括select、poll、epoll模型的udp服务端代码。

    python网络编程DAY04.txt

    代码接口 : select poll epoll ************************************************** epoll方法 使用方法:基本与poll方法相同 * 将生产对象 poll() 改为epoll() * 将所有poll对象事件改为epoll对象事件 区别 : ...

    网络模型的事件驱动库Betternet.zip

    BetternetBetternet 是用C 实现的一个基于epoll,poll,select等网络模型的事件驱动库,以后会封装成网络库,目前只是在测试阶段。 标签:Betternet

    物联网&嵌入式模型

    嵌入式&物联网,Linux服务器模型,循环服务器,并发服务器【多进程, 多线程 ,IO口多路复用(select、 poll、epoll)+多线程/进程

    Linux IO模型.emmx

    详细描述了linux io模型(NIO、BIO、select、poll、epoll)的特点以及应用场景

    高性能跨平台网络通信框架.rar

    高性能跨平台网络通信框架代码,支持linux,windows,macos 等操作系统,可以编译...- ***Client*** 基于Event Select / POLL通信模型,每个组件对象创建一个通信线程并管理一个Socket连接,适用于小规模客户端场 景

Global site tag (gtag.js) - Google Analytics