IO多路复用

一、什么是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 通过链表方式

poll函数

四、 参考链接

IO多路复用

select函数详解

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容