多路复用:
select和expoll实现案例:https://blog.csdn.net/qq_43038236/article/details/108350851
由于为了实现服务器的并发(同时服务多个客户端),需要为每个客户端创建一个进程来为它服务,但创建进程、销毁进程非常浪费时间与资源,这个问题有两种解决方案:
1、多路复用:一个进程监控所有的客户端fd+服务端fd。
2、多线程:为每个客户端创建一个线程进行服务。
由于有些读写函数需要以阻塞状态调用,同时可能有多个文件描述需要同时读写,多路复用就是同时监控多个文件的描述符。
int select(int nfds, fd_set *readfds, fd_set *writefds,
fd_set *exceptfds, struct timeval *timeout);
功能:监控若干个文件描述符
nfds:最大的文件描述符加1
readfds:需要监控读操作的文件描述符集合,既输入又是输出。
writefds:需要监控写操作的文件描述符集合,既输入又是输出。
exceptfds:需要监控异常的文件描述符时间,既输入又是输出。
timeout:倒计时时间