IO模型图解

详情见图

在这里插入图片描述
IO模型

  1. 用户空间与内核空间 1
    1.1. 运行用户程序和系统程序的地方,用户程序通过系统调用接口调用系统资源 1
    1.2. top 1
    1.2.1. CPU耗时 1
  2. PIO与DMA 1
    2.1. PIO 1
    2.1.1. 数据通过CPU存储转发,从磁盘读取到内存中 1
    2.2. DMA 1
    2.2.1. 不经过CPU直接进行磁盘和内存(内核空间)的数据交换 1
  3. 缓存IO与直接IO 1
    3.1. 缓存IO(标准IO) 1
    3.1.1. 数据:磁盘->DMA copy到内核空间->CPU copy 到用户空间 1
    3.1.2. 读操作 2
    3.1.3. 写操作 2
    3.1.4. 优点 2
    3.1.5. 缺点 2
    3.2. 直接IO 2
    3.2.1. 数据:磁盘 <-> 用户空间 2
    3.2.2. 减少数据复制,多用于数据库管理系统 2
    3.2.3. 数据从磁盘加载,加载缓慢 2
    3.2.4. open系统调用使用参数O_DIRECT 2
  4. IO访问方式 2
    4.1. 磁盘IO 2
    4.1.1. 数据:磁盘->内核缓存->用户缓存 2
    4.2. 网络IO 2
    4.2.1. 数据:磁盘->内核缓存->应用缓存->内核Socket缓存->网卡缓存 2
  5. 同步与异步 2
    5.1. 同步IO 3
    5.1.1. 触发IO操作后等待或轮询IO操作是否就绪 3
    5.2. 异步IO 3
    5.2.1. 触发IO操作后便执行其他事情,IO操作完成时得到通知 3
  6. 阻塞与非阻塞 3
    6.1. 阻塞IO 3
    6.1.1. 通过系统调用进行IO操作时,调用阻塞 3
    6.2. 非阻塞IO 3
    6.2.1. 通过系统调用进行IO操作时,调用不阻塞,直接返回,返回时可能没有数据 3
  7. Reactor模式 3
    7.1. 构成 3
    7.1.1. 事件分发器(Dispatcher) 3
    7.1.2. 事件分离器(Event Demultiplexer) 3
    7.1.3. 系统处理程序(Handles) 3
    7.1.4. 事件处理器(Event Handler) 3
    7.2. 优点 3
    7.2.1. 代替多线程模式,节省系统资源,提高系统吞吐量 3
  8. Proactor模式 3
    8.1. 应用程序不需要进行实践的读写,只需要读取或写入缓存,系统再从缓存读取或写入到真正的IO设备 3
  9. Reactor模式与Proactor模式对比 4
    9.1. Reactor将handle放入select,等待就绪后操作;Proactor调用aoi_write后立刻返回,由内核写 4
    9.2. Reactor实现被动的事件分离和分发模型;Proactor实现了主动的事件分离和分发模型 4
    9.3. Reactor实现简单,处理耗时短的处理场景高效;Proactor处理耗时长的并发场景更高效 4
    9.4. Reactor处理耗时长的操作会造成事件分发阻塞;Proactor实现逻辑复杂,依赖系统支持 4
  10. IO多路复用 4
    10.1. 通过一种机制同时监听多个描述符,一旦描述符就绪,通知程序进行相应的操作 4
    10.2. 实现机制 4
    10.2.1. select 4
    10.2.2. poll 4
    10.2.3. epoll 4

1.用户空间与内核空间
1.1.运行用户程序和系统程序的地方,用户程序通过系统调用接口调用系统资源
1.2.top
1.2.1.CPU耗时
1.2.1.1.us - User 用户空间
1.2.1.2.sy - System 内核空间
1.2.1.3.ni - nice 低优先级进程
1.2.1.4.id - idle
1.2.1.5.wa - wait 等待
1.2.1.6.hi - hardware interrupt
1.2.1.7.si - software interrupt
1.2.1.8.st -stole time 虚拟机专用,偷走时间百分比
2.PIO与DMA
2.1.PIO
2.1.1.数据通过CPU存储转发,从磁盘读取到内存中
2.2.DMA
2.2.1.不经过CPU直接进行磁盘和内存(内核空间)的数据交换
3.缓存IO与直接IO
3.1.缓存IO(标准IO)
3.1.1.数据:磁盘->DMA copy到内核空间->CPU copy 到用户空间
3.1.2.读操作
3.1.2.1.从缓存中取,没有则从磁盘copy到缓存
3.1.3.写操作
3.1.3.1.写入缓存,由系统统一写入磁盘,除非使用sync同步命令
3.1.4.优点
3.1.4.1.一定程度分离用户空间和内核空间,保证系统安全
3.1.4.2.减少磁盘访问次数,提高性能
3.1.5.缺点
3.1.5.1.增加数据传输中copy次数,cpu开销大
3.2.直接IO
3.2.1.数据:磁盘 <-> 用户空间
3.2.2.减少数据复制,多用于数据库管理系统
3.2.3.数据从磁盘加载,加载缓慢
3.2.4.open系统调用使用参数O_DIRECT
4.IO访问方式
4.1.磁盘IO
4.1.1.数据:磁盘->内核缓存->用户缓存
4.2.网络IO
4.2.1.数据:磁盘->内核缓存->应用缓存->内核Socket缓存->网卡缓存
5.同步与异步
5.1.同步IO
5.1.1.触发IO操作后等待或轮询IO操作是否就绪
5.2.异步IO
5.2.1.触发IO操作后便执行其他事情,IO操作完成时得到通知
6.阻塞与非阻塞
6.1.阻塞IO
6.1.1.通过系统调用进行IO操作时,调用阻塞
6.2.非阻塞IO
6.2.1.通过系统调用进行IO操作时,调用不阻塞,直接返回,返回时可能没有数据
7.Reactor模式
7.1.构成
7.1.1.事件分发器(Dispatcher)
7.1.2.事件分离器(Event Demultiplexer)
7.1.3.系统处理程序(Handles)
7.1.4.事件处理器(Event Handler)
7.2.优点
7.2.1.代替多线程模式,节省系统资源,提高系统吞吐量
8.Proactor模式
8.1.应用程序不需要进行实践的读写,只需要读取或写入缓存,系统再从缓存读取或写入到真正的IO设备
9.Reactor模式与Proactor模式对比
9.1.Reactor将handle放入select,等待就绪后操作;Proactor调用aoi_write后立刻返回,由内核写
9.2.Reactor实现被动的事件分离和分发模型;Proactor实现了主动的事件分离和分发模型
9.3.Reactor实现简单,处理耗时短的处理场景高效;Proactor处理耗时长的并发场景更高效
9.4.Reactor处理耗时长的操作会造成事件分发阻塞;Proactor实现逻辑复杂,依赖系统支持
10.IO多路复用
10.1.通过一种机制同时监听多个描述符,一旦描述符就绪,通知程序进行相应的操作
10.2.实现机制
10.2.1.select
10.2.1.1.轮询,最多监听1024个描述符
10.2.2.poll
10.2.2.1.轮询,监听描述符无限制
10.2.3.epoll
10.2.3.1.事件驱动,监听描述符无限制

猜你喜欢

转载自blog.csdn.net/nalw2012/article/details/106168275