解读 I/O 多路复用技术
前言
当我们要编写一个 echo 服务器程序的时候,需要对用户从标准输入键入的交互命令做出响应。在这种情况下,服务器必须响应两个相互独立的I/O事件:
1)网络客户端发起网络连接请求
2)用户在键盘上键入命令行
我们先等待哪个事件呢?没有哪个选择是理想的。
如果在 acceptor 中等待一个连接请求,我们就不能响应输入的命令。类似地,如果在 read 中等待一个输入命令,我们就不能响应任何连接请求。针对这种困境的一个解决办法就是 I/O 多路复用技术。基本思路就是使用 select 函数,要求内核挂起进程,只有在一个或多个 I/O 事件发生后,才将控制返回给应用程序。——《UNIX网络编程》
我们以书中的这段描述来引出我们要讲述的 I/O 多路复用技术。
I/O 多路复用概述

图1
I/O 多路复用,I/O 就是指的我们网络 I/O,多路指多个 TCP 连接(或多个 Channel),复用指复用一个或少量线程。串起来理解就是很多个网络 I/O 复用一个或少量的线程来处理这些连接。
现在大部分讲述 I/O 多路复用的文章用到的上面这张图是《UNIX网络编程》一书的。那么这也是当前我们理解 I/O 多路复用技术的基础知识。从这张图里面我们 GET 到哪些点呢?
个人理解有:
- 1、怎么区分的应用进程与内核
- 2、有两次系统调用分别是 select 和 recvfrom
This chapter requires login to view full content. You are viewing a preview.
Login to View Full Content