内容来自《收割Offer:互联网大厂面经》

面试官提问

● 什么是IO多路复用,请展开说明。

● 请说明多路复用的3种实现方式,从复制次数、工作效率、支持文件描述符数、使用的数据结构等方面进行优缺点对比。

IO 多路复用就是通过一种机制来监听多个文件描述符,某个文件描述符一旦就绪,它就能通知应用程序进行相应的处理。多路复用的 3 种实现方式有 select、poll和epoll。为了更好地体会IO多路复用的优势,下面首先介绍多路复用技术出现之前的阻塞IO,以及运用线程池对阻塞IO进行的技术优化。

1 阻塞

IO阻塞IO的伪代码如图1-8所示。

image.png

图1-8 阻塞IO代码片段

代码中有两个地方会阻塞,分别是accept和read函数。read函数又阻塞在两个阶段:从网卡复制数据到内核缓冲区,从内核缓存区复制数据到用户缓存区,如图1-9所示。

如果客户端一直不发送数据,那么服务器端的处理线程就会一直阻塞在read函数上。

2 引入线程池