BIO NIO AIO 概念理解

来源:互联网 发布:编写软件用什么软件 编辑:程序博客网 时间:2024/06/02 06:09

对IO的变成模型一直比较模糊,分不清楚什么同步阻塞,同步非阻塞等概念,对理解一些网络编程框架造成不少的困扰,花时间理了一下,有理解不到位的地方,烦请客官留言。

Unix编程中将IO模型分为5种:
1. 阻塞IO
2. 非阻塞IO
3. IO复用
4. 信号驱动IO
5. 异步IO

首先,当应用发起一个IO操作,分为两个步骤:
1. 发起IO请求:IO请求一般需要请求特殊资源(如磁盘、RAM、文件),当资源被上一个使用者使用没有被释放时,IO请求就会被阻塞,直到能够使用这个资源。
2. 真正的IO操作:真正进行数据传输

阻塞非阻塞的区别就在发起IO请求这步进行区分:
应用程序发起IO请求后是否能立即返回
- 不能立即返回的称为阻塞IO:即资源不可用时,IO请求一直阻塞,直到反馈结果(有数据或超时)。
- 立即返回的称为非阻塞IO:资源不可用时,IO请求离开返回,返回数据标识资源不可用。

同步异步的区别在真正IO操作这步进行区分:
在将数据从内核拷贝到应用缓冲区期间是否阻塞
- 不阻塞的称为异步IO:操作系统帮应用做完IO操作再将结果返回给应用(应用发送或接收数据后立刻返回,数据写入OS缓存,由OS完成数据发送或接收,并返回成功或失败的信息给应用)
- 阻塞的称为同步IO:实际IO读写阻塞应用进程(应用阻塞在发送或接收数据的状态,直到数据成功传输或返回失败)

综上,前4种属于同步IO,最后一种是异步IO。即:
1. 阻塞IO(同步阻塞IO)
2. 非阻塞IO (同步非阻塞IO)
3. IO复用 (同步非阻塞IO)
4. 信号驱动IO (同步非阻塞IO)
5. 异步IO (异步IO)
未完待续(模型图解,Reactor/Proactor设计模式)… …

0 0
原创粉丝点击