一、I/O多路复用模型(I/O multiplexing )
- 什么是IO复用?
– I/O multiplexing 这里面的 multiplexing 指的其实是在单个线程通过记录跟踪每一个Sock(I/O流)的状态来同时管理多个I/O流。
– 通俗的讲就是在同一个线程里面, 通过拨开关的方式,来同时传输多个I/O流(即分时复用的方式)。
– 实现I/O复用的方式有select poll epoll机制。主要用于服务器的并发处理。
- 在看后面 select相关章节
二、 阻塞I/O模型
- 当进程在执行过程中,它发出一个I/O请求操作(如recvfrom 读操作),如果请求操作需要的条件不满足(没有数据),它会一直在那等待(阻塞进程),直到条件满足。
三、非阻塞I/O模型
- 当进程在执行过程中,它发出一个I/O请求操作,如果请求操作需要的条件不满足,会立即返回一个标志信息,告知条件不满足,不会一直等待。
四、信号驱动I/O模型
- 我们首先开启套接字的信号驱动式IO功能,并通过sigaction系统调用安装一个信号处理函数。该系统调用将立即返回,进程不阻塞。当数据条件满足时,内核向用户进程发送 SIGIO信号。随后进程调用 recvfrom读取数据,并通知主循环数据已准备好待处理,也可以立即通知主循环,让它读取数据报。
- 这种模型的优势在于等待数据报到达期间进程不被阻塞。主循环可以继续执行,只要等待来自信号处理函数的通知:既可以是数据已准备好被处理,也可以是数据报已准备好被读取。
五、 异步I/O
- 进程告知内核需要执行某个I/O操作,然后当内核完成后(包括将数据从内核复制到用户进程缓存区都是由内核完成)通知进程,这期间进程不阻塞。
- 与信号驱动模型的主要区别在于:信号驱动式IO是由内核通知我们何时可以启动一个IO操作,而异步IO模型是由内核通知我们IO操作何时完成。