个人对IO多路复用的理解
IO多路复用主要解决一个代码中多个阻塞函数如何让他们之间运行起来没有影响,每一个阻塞函数都可以独立运行,并且想执行哪一个就执行哪一个。
基本思想
-
先构造一张文件描述符表,用于保存要操作的文件描述符。
-
然后调用一个函数(select() poll() epoll() ),阻塞等待文件描述符准备就绪(文件描述符对应的缓冲区有数据)。
-
当这些文件描述符中的一个或多个已准备好进行IO时函数才返回。
-
函数返回时告诉程序,哪些文件描述符准备就绪,可以进行IO操作。
-
执行完IO操作之后,继续回到这个函数等待文件描述符准备就绪。
用法(也是目前所学习到的)
使用select实现多路复用的步骤:
1.创建一个文件描述符集合fd_set并初始化
2.将需要执行IO操作的文件描述符添加到集合中
3.调用select函数(将select放进循环内部)
4.当select函数返回后,意味着文件描述符已经准备就绪了,此时select函数会移除集合中没有准备就绪的文件描述符。
5.判断集合中剩余哪些文件描述符,剩余谁就说明谁准备就绪了。
如有不对请大佬们多加斧正