上次我们介绍了五种基本的IO模型,在这五种里边多路转接IO是我们要了解的重点。 为什么他重要,我们先拿他和我们基础的IO来进行一下区分,当我们遇到普通的IO时都会开启一个新的进程来处理这个IO,在现在网络的访问量来开,如果同时有五千个IO来恐怕普通的机器都难以处理,更别说动不动就上亿的点击了,那这时候你的CPU占有率会相当的高,并且他并不是在干活如果没有数据的话就会阻塞在那里,浪费你的系统资源,所以就有了我们今天要介绍的多路复用IO,他是一个线程或者进程,通过他来统一管理我们的IO,这样就可以大大的提高服务器的吞吐能力。 就如上图,现在有1000个IO同时来访问机器,只有一个select进程来被系统调用,然后select会进行处理,当这1000个里边有哪个IO准备好了,可以操作了,他会通知对应的进程,这样哪个进程直接来处理就可以了。 我们来了多个IO通过多路复用IO模型来把他们管理起来,然后由这个IO来去通知对应进程是否可以操作。 多路复用主要有三种模型:select、poll、epoll这里我们分析一下他们各自的优缺点。 select模型 在Linux下我们可以通过man命令来查看select函数的详解 int select(int nfds, fd_set *readfds, fd_set *writefds,fd_set *exceptfds, struct timeval *timeout); 第一个参数:nfds is the highest-numbered file descriptor in any of the three sets, plus 1.意思是说这个参数应该是你要监听的文件描述符的个数+1,也就是文件描述符从0.....nfds-1都将会被监听处理。 对于有后边连续的三个参数