该文章参考总结B站视频【并发】IO多路复用select/poll/epoll介绍
IO多路复用
单个线程,通过记录跟踪每个I/O流的状态,来同时管理多个I/O流
实现
select
原理
虚线上为文件描述符号集合fds(即网络连接集合)和记录最大文件描述符准备阶段
遍历fds,准备对应的rset,rset为一个bitmap ,大小为1024
比如:fds为1、2、5、7、9,则对应的bitmap为011001010100…
select(max+1,&rset,null,null,null)
max+1的作用是操作内核轮询bitmap时进行卡位操作,即轮询的范围
select会将rset拷贝到操作内核中对其进行一个轮询操作,如果有数据则将有数据的位(操作rset)进行置位操作并返回继续运行下面代码,无数据则阻塞
有数据:
遍历文件描述符集合(与rest做比较),找出有数据的那个