`

【转】 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会更好.

分享到:
评论

相关推荐

    EPOLL-linux下select-poll的增强版

    1. EPOLL 与 Select、Poll 的比较: - Select:限制 FD 数量(通常为 1024),且在监控大量 FD 时效率低下,需要遍历整个 FD 集合。 - Poll:解决了 Select 的 FD 数量限制,但同样需要遍历所有 FD 来查找就绪事件...

    epoll反应堆模型

    epoll是Linux下多路复用I/O接口select/poll的增强版本,它解决了select/poll中描述符数量限制的问题,能够同时监听的文件描述符数目可以非常大(百万级别)。epoll使用一个文件描述符管理多个文件描述符,性能不受...

    谈谈select&poll&epoll.docx

    在Linux系统中,当面临需要同时管理大量网络连接或文件描述符时,`select`、`poll`和`epoll`是三种常见的I/O多路复用技术,它们允许程序在一个单独的线程中等待多个文件描述符的事件,提高了程序的效率和并发能力。...

    select poll epoll 代码实例

    select poll epoll 代码实例

    自己封装的epoll事件驱动模型

    `epoll`是Linux内核提供的一种高效、高性能的I/O事件通知机制,主要用于解决多路复用技术(如select、poll)在高并发场景下的性能问题。epoll相比于传统的I/O多路复用技术,具有更好的扩展性和效率,尤其在大量文件...

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

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

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

    总结来说,`select`、`poll`和`epoll`是处理多路并发情况下的经典I/O复用模型,它们各有特点,适应不同的场景。在选择和实现时,开发者需要根据项目的规模、性能需求以及操作系统特性进行综合考虑。通过深入理解这三...

    epoll/iocp 比较

    - **定义**:epoll是Linux内核提供的一种I/O事件通知机制,它扩展了传统的select/poll,可以处理大量打开的文件描述符。 - **工作流程**: - 使用`epoll_create()`创建一个epoll实例。 - 使用`epoll_ctl()`注册...

    epoll模型的一个例子

    `epoll`模型是解决高并发服务器性能瓶颈的有效手段之一,它比传统的`select`和`poll`模型更加先进,能够更有效地管理和监控文件描述符(FDs)的状态变化。 `epoll`的核心概念包括`epoll_create`、`epoll_ctl`和`...

    linux下epoll网络模型介绍

    - **高效的事件通知机制**:epoll 仅通知发生事件的文件描述符,而不是像 `select` 或 `poll` 那样轮询所有文件描述符。这意味着当有大量空闲连接时,epoll 的性能将显著优于其他方法。 - **内存映射**:epoll 使用...

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

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

    epoll网络模型

    `epoll`是Linux系统提供的一种I/O多路复用技术,相较于传统的`select`和`poll`,它在处理大量并发连接时表现出更高的效率和性能。本项目使用C++编程语言,在Ubuntu环境下开发,利用`g++`编译器进行编译,包含了`...

    网络编程epoll模型

    在这个模型中,`epoll`替代了传统的`select`和`poll`,解决了它们在处理大量文件描述符时性能下降的问题。`epoll`的出现使得开发高并发服务器成为可能,它被广泛应用于网络服务,如Web服务器、数据库服务器等。 ...

    select poll epoll

    综上所述,`select`、`poll`和`epoll`各有优劣,开发者应根据实际需求和目标平台选择合适的多路复用I/O模型。提供的压缩包文件中的`select`、`poll`及`epoll`示例代码可以帮助你更深入地理解和掌握这些技术,通过...

    linux内核select/poll,epoll实现与区别

    Linux内核中的`select`、`poll`和`epoll`是用于实现多路复用I/O的关键函数,它们允许程序在一个线程中同时处理多个文件描述符的读写操作,提高了系统的并发处理能力。这些函数在不同场景下各有优劣,理解它们的实现...

    epoll服务器、客户端模型

    epoll是Linux内核提供的一种I/O多路复用技术,相比于传统的select和poll,它具有更高的效率和可扩展性。epoll的优点在于它可以监控大量文件描述符,并且当有事件发生时,仅返回就绪的文件描述符,减少了系统调用的...

    EPOLL模型详解

    select模型的一个关键限制是其FD_SETSIZE宏定义的最大句柄数,通常是2048。而EPOLL则没有这样的限制,它可以处理的FD上限取决于系统允许的最大打开文件数,通常远大于2048,可以通过`/proc/sys/fs/file-max`查看。 ...

    Help-to-understand-select-poll-epoll.rar_Help!_epoll_kernel sele

    `select`、`poll`和`epoll`是三种常见的I/O多路复用技术,用于高效地管理多个文件描述符(FDs)的读写就绪状态。本文件“Help to understand select, poll, epoll.pdf”旨在帮助开发者深入理解这些机制的工作原理,...

Global site tag (gtag.js) - Google Analytics