高性能服务器————高性能服务器IO复用之select

谈到IO复用就不得不了解一下,都有哪些关于IO复用的方法IO复用的方法分为3种,这篇重点介绍select,至于其余的两种方法将会在下一篇介绍,考虑到篇幅和问题研究的专一性,这篇的重点就是分析select接口和原理,以及select使用的实例,如果对于为什么要使用IO复用以及IO复用的好处,可以翻看上一篇博客。建议在了解这篇博客之前,先了解这些概念:阻塞、非阻塞、以及文件描述符的就绪状态、IO复...
摘要由CSDN通过智能技术生成

谈到IO复用就不得不了解一下,都有哪些关于IO复用的方法
IO复用的方法分为3种,这篇重点介绍select,至于其余的两种方法将会在下一篇介绍,考虑到篇幅和问题研究的专一性,这篇的重点就是分析select接口和原理,以及select使用的实例,如果对于为什么要使用IO复用以及IO复用的好处,可以翻看上一篇博客。
建议在了解这篇博客之前,先了解这些概念:阻塞、非阻塞、以及文件描述符的就绪状态、IO复用(以上这些可以在上一篇IO中已有一些介绍)。
IO复用的三种方法:select、poll、epll,这几种方式均为(同步IO处理)
select:
IO复用在设计上遵守一下规则:
1.I/O多路复用:当一个文件描述符I/O就绪时进行通知。
2.都不可用?在有用的文件描述符到来之前处于睡眠状态。
3.唤醒:哪个文件描述符可用了?
4.处理所有I/O就绪的文件描述符,没有阻塞。
5.返回第1步,重新开始。
select()系统调用:

 #include <sys/select.h>
/* According to earlier standards */
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
int select(int nfds, fd_set *readfds, fd_set *writefds,
fd_set *exceptfds, struct timeval *timeout);

参数说明:
nfds:这个值对应于所要监控的所有描述符中描述符值最大的加1
readfds:是一个fd_set类型,fd_set是一个结构体数组仅包含一个整型数组,该数组的每个元素的每一位(bit)标记一个文件描述符。fd_set能容纳的文件描述符数量有FD_SETSIZE决定,这个限制了select同时能处理的文件描述的总量。Linux下默认是1024。readfds可以看作一个位图,其中加入的文件描述符,我们关心的是它们的可读事件。
writefds:可以对照readfds理解。
exceptfds:在这个位图中加入的文件描述符,我们只关心他们的可写事件。
timeout:前面我们说过,当没有就绪的文件描述符到来时select一直处于阻塞状态,而有了这个timeout之后,程序会在调用处select阻塞timeout时间段,直到有就绪的文件描述符时才返回,或者超出这段时间时返回。
注意:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值