IO 操作与 IO 模型
Posted 51reboot运维开发
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IO 操作与 IO 模型相关的知识,希望对你有一定的参考价值。
一 、IO 操作本质
二、 IO 模型
BIO – 阻塞模式 I/O
NIO – 非阻塞模式 I/O
IO Multiplexing - I/O多路复用模型
AIO – 异步 I/O 模型
三、同步 I/O 与异步 I/O
四、 IO 设计模式
Proactor模式
对比分析
Reactor 模式
数据复制的过程中不会消耗 CPU
# 1 内存分为内核缓冲区和用户缓冲区
# 2 用户的应用程序不能直接操作内核缓冲区,需要将数据从内核拷贝到用户才能使用
# 3 而 IO 操作、网络请求加载到内存的数据一开始是放在内核缓冲区的
-
同步 I/O -
概念:导致请求进程阻塞的 I/O 操作,直到 I/O 操作任务完成 -
类型:BIO、NIO、IO Multiplexing -
异步 I/O -
概念:不导致进程阻塞的 I/O 操作 -
类型:AIO
-
同步 I/O 与异步 I/O 判断依据是,是否会导致用户进程阻塞 -
BIO 中 socket 直接阻塞等待(用户进程主动等待,并在拷贝时也等待) -
NIO 中将数据从内核空间拷贝到用户空间时阻塞(用户进程主动询问,并在拷贝时等待) -
IO Multiplexing 中 select 等函数为阻塞、拷贝数据时也阻塞(用户进程主动等待,并在拷贝时也等待) -
AIO 中从始至终用户进程都没有阻塞(用户进程是被动的)
Reactor 模式,基于同步 I/O 实现
- Proactor 模式,基于异步 I/O 实现
- kqueue、epoll、poll、select 等机制
- 前提是对应操作系统支持 AIO,比如支持异步 IO 的 linux(不太成熟)、具备 IOCP 的windows server(非常成熟)
-
事件注册:将事件与事件处理器进行分离。将事件注册到事件循环中,将事件处理器单独管理起来,记录其与事件的对应关系。 -
事件监听:启动事件循环,一旦事件已经就绪/完成,就立刻通知事件处理器 -
事件分发:当收到事件就绪/完成的信号,便立刻激活与之对应的事件处理器 -
事件处理:在进程/线程/协程中执行事件处理器
Proactor 模式
对比分析
●
●
●
●
●
以上是关于IO 操作与 IO 模型的主要内容,如果未能解决你的问题,请参考以下文章