一、什么是IO多路复用?
多个IO事件复用同一个线程
二、Select函数
2.1 select介绍
fd_set: fdset是一个结构体,里面是数组组成的.数组的每一位都是fd的状态
- fd_set操作
FD_SET(int fd, fd_set *fdset); //将fd加入set集合
FD_CLR(int fd, fd_set *fdset); //将fd从set集合中清除
FD_ISSET(int fd, fd_set *fdset); //检测fd是否在set集合中,不在则返回0
FD_ZERO(fd_set *fdset); //将set清零使集合中不含任何fd
// maxfd fd 文件描述符 文件 maxfd 文件描述符+1
int select(int maxfd, fd_set *readset, fd_set *writeset, fd_set *exceptset, const struct timeval *timeout);
2.2 select的局限性
所支持的文件描述符的个数是有限的。在 Linux 系统中,select 的默认最大值为 1024。
Q:为什么局限性?
A:可以看到的是sleect的fd状态是fd_set维护的 ,fd_set是一个数组.
所以大小会被限制
这才有下面的Poll 通过链表方式