浏览 5667 次
锁定老帖子 主题:Epoll,Poll,Select
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-09-16
最后修改:2009-09-16
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会更好. 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-09-16
epoll的适用情景就是大量的socket,但是活跃多不是很高的情况。
|
|
返回顶楼 | |
发表时间:2009-09-19
特别是IBM的aix系统!
|
|
返回顶楼 | |
发表时间:2009-09-20
raojl 写道 特别是IBM的aix系统!
深有感触? |
|
返回顶楼 | |
发表时间:2009-09-20
如果是有限数量的长连接,,用不用 async方式 都可以。我现在和tokyo tyrant都是用长连接,同步操作。
|
|
返回顶楼 | |
发表时间:2009-09-21
还有 kqueue,实际上有不少服务器是基于 BSD 开发的
kqueue 和 epoll 类似,据说效率上稍微高一些,不过没比较过 |
|
返回顶楼 | |
发表时间:2009-09-21
mryufeng 写道 epoll的适用情景就是大量的socket,但是活跃多不是很高的情况。
是的,说到底还是一个场景的问题,具体情况具体分析 |
|
返回顶楼 | |
发表时间:2009-09-23
kqueue和epoll都是异步IO的实现。按理说只要一定量以后表现一定会比同步的机制更优越。
|
|
返回顶楼 | |
发表时间:2009-09-24
check 写道 kqueue和epoll都是异步IO的实现。按理说只要一定量以后表现一定会比同步的机制更优越。
异步IO只有windows下的IOCP,其他都不是 |
|
返回顶楼 | |
发表时间:2010-04-26
bachmozart 写道 check 写道 kqueue和epoll都是异步IO的实现。按理说只要一定量以后表现一定会比同步的机制更优越。
异步IO只有windows下的IOCP,其他都不是 同步IO |
|
返回顶楼 | |