vlambda博客
学习文章列表

IO模型以及多路复用基本原理

前面几节文章大概介绍了网络编程的第一部分:网络基础上、下、TCP编程、并发服务器、UDP编程。
接下来到了网络编程第二部分:IO模型和多路复用模型、网络分析测试工具、封包、IP和TCP头,TCP握手过程、网络信息检索、网络属性设置、超时检测,我们今天先开始"IO模型和多路复用模型",知识都会娓娓道来,敬请关注!
1:IO模型
在UNIX/Linux下主要有4种IO模型:
1.1:阻塞I/O:最常用
1.2:非阻塞IO:可防止进程阻塞在I/O操作上,需要轮询
1.3:I/O多路复用:允许同时对多个I/O进行控制
1.4:信号驱动I/O:一种异步通信模型

上面这张截图可以了解到,读操作、写操作、其它操作都有对应的函数会发生阻塞现象,其中还有另外一个函数不会发生阻塞,就算UDP编程里的"sento"函数,这个函数是不会发生阻塞的。

2.读阻塞

IO模型以及多路复用基本原理


3.写阻塞

IO模型以及多路复用基本原理


4.非组赛模式I/O

IO模型以及多路复用基本原理


IO模型以及多路复用基本原理


EWOULDBLOC:表示错误,返回一个错误值,是"should Block"的过去式



上面介绍了不同的阻塞模型,先在脑海中有个认识,下面重点介绍下多路复用I/O




实现步骤:

1:把关心的文件描述符加入到集合中(fd_set);

2:调用select()/poll()函数去监控集合"fd_set"中哪些文件描述符(阻塞等待集合中一个或多个文件描述符有数据)

3:当有数据时退出select()阻塞

4:依次判断哪个文件描述符有数据

5:依次处理有数据的文件描述符上的数据