下面只是一个简单的介绍,比较适合面试的时候概括:
- select模型:这是最古老的一种IO多路复用模型。它的主要功能是监视多个文件描述符(在网络编程中,文件描述符通常代表一个socket连接),直到其中一个文件描述符准备好进行某种IO操作(如读或写)为止。使用select模型的优点是跨平台性好,基本上所有的操作系统都支持。但是它有一些明显的缺点,如单个进程能够监视的文件描述符数量有限(通常是1024),处理效率较低(每次调用select都需要遍历所有的文件描述符),以及它不能随着连接数的增加而线性扩展。
- poll模型:poll模型和select模型非常相似,但它没有最大文件描述符数量的限制。和select一样,poll每次调用时也需要遍历所有的文件描述符,同样不能随着连接数的增加而线性扩展。
- epoll模型:这是一个在Linux 2.6及以后版本中引入的新型IO多路复用模型。与select和poll相比,epoll在处理大量并发连接时更高效。它默认使用了一个事件驱动的方式(ET),以红黑树作为底层的数据结构,只有当某个文件描述符准备好进行IO操作时,它才会将这个文件描述符添加到就绪列表中,这避免了遍历所有文件描述符的开销。另外,epoll没有最大文件描述符数量的限制,因此它可以处理更多的并发连接。
每种模型都有其优点和缺点,选择哪种模型取决于你的具体应用和环境。