Select和epoll的区别
来源:互联网 发布:上女朋友妈妈 知乎 编辑:程序博客网 时间:2024/05/17 04:26
转自:http://blog.csdn.net/mafuli007/article/details/7233304
当一个节点和多个节点建立连接时,如何高效的处理多个连接的数据,下面具体分析两者的区别。
1. select函数
函数原型:int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
参数介绍:(1)nfds -- fdset集合中最大描述符值加1
(2)fdset -- 一个位数组,其大小限制为_FD_SETSIZE(1024)
位数组的每一位代表的是其对应的描述符是否需要被检查。
(3)readfds -- 读事件文件描述符数组
(4 )writefds -- 写事件文件描述符数组
(5)exceptfds -- 错误事件文件描述符数组
(6)timeout -- 超时事件,该结构被内核修改,其值为超时剩余时间。
对应内核:select对应于内核中的sys_select调用,sys_select首先将第二三四个参数指向的fd_set拷贝到内核,然后对每个被SET的描 述符调用进行poll,并记录在临时结果中(fdset),如果有事件发生,select会将临时结果写到用户空间并返回;当轮询一遍后没有任何事件发生时,如果指定了超时时间,则select会睡眠到超时,睡眠结束后再进行一次轮询,并将临时结果写到用户空间,然后返
2. select/poll特点
3.1 所用到的函数:
select 最不能忍受的是一个进程所打开的FD是有一定限制的,由FD_SETSIZE设置,默认值是2048。对于那些需要支持的上万连接数目的IM服务器来说显然太少了。这时候可以:
传统的select/poll另一个致命弱点就是当你拥有一个很大的socket集合,不过由于网络延时,任一时间只有部分的socket是"活跃"的,但是select/poll每次调用都会线性扫描全部的集合,导致效率呈现线性下降。
<4>内核微调
这一点其实不算epoll的优点了,而是整个linux平台的优点。也许你可以怀 疑linux平台,但是你无法回避linux平台赋予你微调内核的能力。比如,内核TCP/IP协议栈使用内存池管理sk_buff结构,那么可以在运行 时期动态调整这个内存pool(skb_head_pool)的大小--- 通过echo XXXX>/proc/sys/net/core/hot_list_length完成。再比如listen函数的第2个参数(TCP完成3次握手 的数据包队列长度),也可以根据你平台内存大小动态调整。更甚至在一个数据包面数目巨大但同时每个数据包本身大小却很小的特殊系统上尝试最新的NAPI网 卡驱动架构。
- Select和epoll的区别
- Select和epoll的区别
- Select和epoll的区别
- select和epoll的区别
- Select和epoll的区别
- select和epoll的区别
- Select和epoll的区别
- Select和epoll的区别
- epoll 和 select 的区别
- select和Epoll的区别
- epoll和select的区别
- epoll和select的区别
- epoll和select的区别
- Select和epoll的区别
- select和epoll的区别
- select 和 epoll的区别
- select和epoll的区别
- epoll和select的区别
- 一个简易的文件搜索器
- 很简单的jquery弹出对话框
- UVA 11292 勇者斗恶龙,排序
- Java之IO流(二)
- 用友NC部署Thrift接口服务步骤
- Select和epoll的区别
- 详细整理ArrayList、Hashtable、Vector、HashSet、HashMap初始大小、加载因子、扩容方式
- JAVA 如何设计一个秒杀系统
- Spring学习的切入点
- 动态规划 吃糖果
- svn服务器搭建及使用
- C++ 之对象成员的引用
- Android原始多渠道打包
- 数据库服务器的安装与配置