IO主要包括:TCP、UDP、文件IO;
以下模型中的非阻塞、多路复用和异步只针对网络IO,和文件IO无关;
UNIX五种IO模型
1、阻塞式IO模型
应用进程发送IO系统调用(recvfrom),然后等待数据到达,直到数据到达才返回,不然就一直处于等待状态;
2、非阻塞式IO模型
应用进程发起IO系统调用,如果没有数据,也不会阻塞应用进程,而是告诉应用进程晚点再来,然后应用进程一直轮询,直到返回数据;
3、IO复用模型
使用select或者是epoll这种函数来代替IO系统调用,select这种操作可以去检查数据是否到达,并且可以同时发起多个,当select检查到数据到达时,应用进程再发起IO系统调用;
4、信号驱动式IO模型
应用进程发送signaciton系统函数代替IO系统调用,这个函数会立即返回,当有数据到达时,系统内核会递交SIGIO信号给应用进程,应用进程再发起IO系统调用;
5、异步IO模型
以上几种模型还都是同步模型,每次发起IO调用,还都要等待数据拷贝完成,异步IO模型只要应用进程向系统内核发起aio_read操作,然后立即返回,数据到达后,系统内核会根据aio_read发起的参数,自动拷贝数据到用户空间;
BIO——同步阻塞IO
每个线程去处理一个网络IO请求,数据没到达,就一直阻塞等待;
NIO——同步非阻塞IO
- 与传统IO优势:
- 面向Buffer
- 双向(Buffer读写)
- 非阻塞
- 多路复用
- 核心原理:
- Selector:多路复用选择器,监控Channel的IO状况;
- Channel:管道节点的连接与数据运输;
- Buffer:数据读写操作发生区域;
Channel需要向Selector注册,单个线程调用Selector的select方法来监听多个Channel;