`
CharlesCui
  • 浏览: 427825 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Epoll,Poll,Select

阅读更多
先说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会更好.
分享到:
评论
10 楼 raojl 2010-04-26  
bachmozart 写道
check 写道
kqueue和epoll都是异步IO的实现。按理说只要一定量以后表现一定会比同步的机制更优越。


异步IO只有windows下的IOCP,其他都不是


同步IO
9 楼 silasoni 2009-09-29  
mryufeng 写道
epoll的适用情景就是大量的socket,但是活跃多不是很高的情况。

学习
8 楼 bachmozart 2009-09-24  
check 写道
kqueue和epoll都是异步IO的实现。按理说只要一定量以后表现一定会比同步的机制更优越。


异步IO只有windows下的IOCP,其他都不是
7 楼 check 2009-09-23  
kqueue和epoll都是异步IO的实现。按理说只要一定量以后表现一定会比同步的机制更优越。
6 楼 argan 2009-09-21  
mryufeng 写道
epoll的适用情景就是大量的socket,但是活跃多不是很高的情况。


是的,说到底还是一个场景的问题,具体情况具体分析
5 楼 arust 2009-09-21  
还有 kqueue,实际上有不少服务器是基于 BSD 开发的
kqueue 和 epoll 类似,据说效率上稍微高一些,不过没比较过
4 楼 mathgl 2009-09-20  
如果是有限数量的长连接,,用不用 async方式 都可以。我现在和tokyo tyrant都是用长连接,同步操作。

3 楼 CharlesCui 2009-09-20  
raojl 写道
特别是IBM的aix系统!


深有感触?
2 楼 raojl 2009-09-19  
特别是IBM的aix系统!
1 楼 mryufeng 2009-09-16  
epoll的适用情景就是大量的socket,但是活跃多不是很高的情况。

相关推荐

    linux中 epoll poll 和select的区别

    linux中 epoll poll 和select的区别

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

    下面文章在这段时间内研究 select/poll/epoll的内核实现的一点心得体会: select,poll,epoll都是多路复用IO的函数,简单说就是在一个线程里,可以同时处理多个文件描述符的读写。 select/poll的实现很类似,epoll...

    EPOLL-linux下select-poll的增强版

    【EPOLL - Linux 下的 Select 和 Poll 增强版】 EPOLL 是 Linux 内核提供的 I/O 多路复用技术,它是 Select 和 Poll 的更高效版本,特别是在处理大量并发连接时。EPOLL 提供了一种基于事件的异步 I/O 模型,能够...

    谈谈select&poll&epoll.docx

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

    select poll epoll 代码实例

    select poll epoll 代码实例

    多路复用之select、poll、epoll的区别

    无论是select,poll还是epoll都需要内核把FD消息通知给用户空间,如何避免不必要的内存拷贝就很重要,在这点上,epoll是通过内核于用户空间mmap同一块内存实现的。而如果你想我一样从2.5内核就关注epoll的话,一定...

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

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

    高性能网络设计-网络编程(网络io与select、poll、epoll,react).zip

    高性能网络设计-网络编程(网络io与select、poll、epoll,reactor原理与实现、http服务器实现、websocket协议与服务器实现)与网络原理(服务器百万并发,网络协议栈,UDP可靠传输协议QUIC),协程框架NtyCo的实现....

    select poll epoll

    `select`、`poll`和`epoll`是Linux系统中用于处理多路复用I/O的主要机制,它们允许程序同时监控多个文件描述符(FDs),等待数据就绪后再进行处理。下面将详细介绍这三个方法,并对比它们的特点和使用场景。 ### 1....

    select和epoll实现多路复用.zip

    相比之下,`epoll`(Event Poll)是Linux内核提供的更高级别的接口,它克服了`select`的这些局限性。`epoll`支持边缘触发(ET)和水平触发(LT)两种模式,且能有效地处理大量文件描述符。在`epoll.c`和`epollclient...

    linux_threadpool.zip_epoll select _epoll thread_epoll编程_thread

    epoll是Linux内核提供的更为高效的一种I/O多路复用技术,相比select和poll,它能处理更多的并发连接,并且有更好的性能。epoll采用“事件驱动”模型,通过`epoll_create()`、`epoll_ctl()`和`epoll_wait()`三个系统...

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

    为了高效地管理这些并发连接,程序员经常使用I/O复用技术,其中"select"、"poll"和"epoll"是三种常见的机制。本文将深入探讨这三种方法,并通过实例分析它们的工作原理及其优缺点。 首先,`select`函数是最早被引入...

    poll/epoll源码剖析

    在Linux内核源码中,poll系统调用的实现代码位于`fs/select.c`文件中的`sys_poll`函数。poll调用的核心在于`struct poll_table_struct`结构体,该结构体包含了回调函数指针`qproc`,它指向`__pollwait`函数。`__...

    select、poll、epoll的区别使用示例代码

    Linux系统编程——I/O多路复用select、poll、epoll的区别使用,相关教程如下: http://blog.csdn.net/tennysonsky/article/details/45745887

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

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

    Linux网络编程,包括tcp/upd,select/poll/epoll/pdf

    它主要涉及到TCP/UDP协议以及select/poll/epoll等多路复用技术。 TCP/UDP协议是网络通信的基础,其中TCP协议提供面向连接的可靠数据传输,而UDP协议则提供无连接的不可靠数据传输。在Linux网络编程中,开发者需要...

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

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

Global site tag (gtag.js) - Google Analytics