Select和epoll的区别
来源:互联网 发布:淘宝运营策划书 编辑:程序博客网 时间:2024/05/19 16:37
当一个节点和多个节点建立连接时,如何高效的处理多个连接的数据,下面具体分析两者的区别。
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的区别
- Topographic ICA as a Model of Natural Image Statistics(作为自然图像统计模型的拓扑独立成分分析)
- 树莓派 B+ Yeelink实现图像监控
- uva 10714(贪心)
- Sublime Text 2 设置文件详解
- 如何解决c++中循环包含头文件的问题
- Select和epoll的区别
- ORA-28000: the account is locked-的解决办法
- 薄壳理论在形状匹配等领域的应用
- Java-WebSocket 项目的研究(一) Java-WebSocket类图描述
- Ubuntu下 ssh : connect to host localhost port 22:Connection refused
- flume
- Android开发环境为什么需要依赖jvm
- Java-WebSocket 项目的研究(二) :客户端连接服务器并发送消息实例
- UI设计师要掌握的工具