select模型
select机制
当使用read等系统调用在缓冲区里面读取数据的时候,如果和缓冲区里面没有数据,那么函数会被系统直接挂起等待,这种函数称之为阻塞式接口。如果缓冲区内一直没有数据那么该系统调用会一直阻塞,知道缓冲区内有可读数据。使用select函数的时候,select可以注册多个需要执行IO的socket,并不断的调用select读取被激活的socket,即在一个线程上面可以同时处理多个IO请求。
select相关的API
#include <sys/select.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
int select(int maxfdp, fd_set *readset, fd_set *writeset, fd_set *exceptset,struct timeval *timeout);
参数说明:
- maxfd:被监听的文件描述符的总数
- readset、writeset、exceptset分别对应着可读、可写、异常等事件对应的文件描述符集
- timeout:select函数的超时时间
- timeval结构体:
struct timeval
{
long tv_sec; /*秒 */
long tv_usec; /*微秒 */
};
- 返回值:如果超时返回0,失败返回-1,>0表示就绪的文件描述符的个数。
操作文件文件描述符集的宏
<