select总结 一

int select(int maxfdp,fd_set *readfds,fd_set *writefds,fd_set *errorfds,struct timeval*timeout);


struct fd_set 为一个集合 集合里存放的是文件描述符即文件句柄
都是一些宏:
清空集合FD_ZERO(fd_set *)
加入一个描述符到集合FD_SET(int ,fd_set*)
从集合删除一个描述符FD_CLR(int,fd_set*)
检查集合中的文件描述符是否可读写FD_ISSET(int ,fd_set* )

int maxfdp是一个整数值,
是指集合中所有文件描述符的范围,即所有文件描述符的最大值加1

 timeval*timeouts时间  NULL阻塞状态   

select的特点:select 选择句柄的时候,是遍历所有句柄,也就是说句柄有事件响应时,
select需要遍历所有句柄才能获取到哪些句柄有事件通知,因此效率是非常低。
select的复杂度很高O(n)
select支持的句柄数是有限制的, 同时只支持1024个,这个是句柄集合限制的,如果超过这个限制,
很可能导致溢出,而且非常不容易发现问题, TAF就出现过这个问题, 调试了n天,才发现:)
当然可以通过修改linux的socket内核调整这个参数

epoll的特点:epoll对于句柄事件的选择不是遍历的,是事件响应的,
就是句柄上事件来就马上选择出来,不需要遍历整个句柄链表,因此效率非常高,内核将句柄用红黑树保存的。

(复杂度降低到了O(k),k为产生I/O事件的流的个数,也有认为O(1)的)

文章有借鉴--谢谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值