I/O模型

CPU、内存和硬盘

在这里插入图片描述

CPU:计算机地运算核心和控制核心,让计算机的各个部件顺利工作,起到协调和控制的作用。
内存:负责硬盘等硬件上的数据与CPU之间的数据交换处理、缓存系统中的临时数据。断电后数据丢失。
硬盘:存储资料、软件等数据的设备,有容量大、断电数据不丢失等特点。

CPU、内存和硬盘三者的关系
先看个例子:双击QQ图标打开QQ时,其实就是通过鼠标(输入设备)向CPU发送了一条指令,CPU接收到这条指令后,QQ程序就从硬盘加载到了内存,加载完成后,CPU就开始执行QQ程序,也就是我们看到的QQ程序运行起来了。如果这时用QQ截取了一张图片,那么这张图片首先会保存到内存里,当右键保存这张图片时,这张图片会保存到硬盘里。
注意哈,QQ程序是先从硬盘加载到内存,然后CPU才开始执行QQ程序的。
那为啥CPU不直接在硬盘里执行QQ程序,非要先把QQ程序放到内存后再执行?
原因是,CPU内高速存储器的存取速度>内存的存取速度>硬盘的存取速度

CPU、内存和硬盘三者的关系,简单来说,就是
硬盘里存储着我们的程序和数据,当我们运行程序时,CPU接收到我们的命令后,会这样做:

  • CPU对硬盘说:我要运行你存储的程序A,你把程序A送到内存中去
  • CPU对内存说:我让硬盘把程序A送到你这里来,你保存下

等程序A被完整送到内存后,CPU就开始执行程序A了。

HTTP MPM

HTTP MPM(Multi-Processing Modules,多路处理模块)支持三种I/O模型,分别是

  • prefork
    两级结构,主进程master负责生成子进程,每个子进程负责响应一个请求。
  • worker
    三级结构,主进程master负责生成子进程,每个子进程负责生成多个线程,每个线程响应一个请求。
  • event
    三级结构,主进程master负责生成子进程,每个子进程响应多个请求
磁盘IO

所谓I/O操作,就是对磁盘上的数据进行读或写操作。
在这里插入图片描述
上图中,第3步:将数据从磁盘文件先加载到内核内存空间缓冲区,等待数据准备完成,时间较长;第4步:将数据从内核缓冲区复制到用户空间的进程的内存中,时间较短。

IO 模型
同步与异步

同步或异步,关注的是消息通知机制。

  • 同步(synchronous)
    调用者等待被调用者返回消息,才能继续执行。
  • 异步(asynchronous)
    被调用者通过状态、通知或回调机制主动通知调用者,被调用者的运行状态。
阻塞与非阻塞

阻塞或非阻塞,关注的是调用者在等待结果返回之前的状态。

  • 阻塞(blocking)
    阻塞,是指IO操作需要彻底完成之后才返回用户空间,调用结果返回之前,调用者被挂起。
  • 非阻塞(nonblocking)
    非阻塞,是指IO操作被调用后立即返回给用户一个状态值,无需等IO操作彻底完成,最终的调用结果返回之前,调用者不用挂起。
5种IO模型
同步阻塞IO模型

在这里插入图片描述

  • 用户线程通过系统调用read发起IO读操作,由用户空间转到内核空间。
  • 内核等数据到达后,将接收到的数据复制到用户空间,完成read操作。
  • 用户需要等read将数据读取到缓冲区后,才继续处理接收到的数据。

同步阻塞IO模型是最简单的IO模型。整个IO请求的过程中,用户线程是阻塞的,这导致用户在发起IO请求时,不能做任何事情,对CPU的资源利用率不够。

同步非阻塞IO模型

在这里插入图片描述
用户线程发起IO请求时立即返回,但并未读取到任何数据,用户线程不断地发起IO请求,直到数据到达后,才真正地读取到数据,继续执行。
整个IO请求过程中,用户线程需要不断地轮询、重复请求,消耗了大量的CPU资源。所以,一般很少直接使用同步非阻塞模型,但在其他的IO模型中会使用同步非阻塞IO的特性。

IO多路复用模型(异步阻塞IO模型)

在这里插入图片描述

  • 用户将需要进行的IO操作添加到select中,然后继续执行其他工作,同时等待select系统调用返回。
  • 当数据到达时,IO被激活,select函数返回,用户线程正式发起read请求,读取数据并继续执行。

由于使用select函数进行IO请求和同步阻塞模型没有太大区别,且多了 添加监视IO、调用select函数等额外操作,因此,从整个流程的效率上来看,与同步阻塞IO模型相比,IO多路复用模型的效率更差了。
但是,同步阻塞IO模型里,一次只能监听一个IO。而IO多路复用模型中,select可以监听多个IO是否已经准备就绪,实现了在同一个线程内同时处理多个IO请求的目的。
IO多路复用模型是最常用的IO模型,但是其异步程度还不够彻底,因为它使用了会阻塞的select系统调用。因此,IO多路复用只能称为异步阻塞IO模型,而非整整的异步IO。

信号驱动IO模型(半异步IO模型)

在这里插入图片描述

  • 用户进行通过sigaction系统调用注册一个信号处理程序,然后主程序可以继续向下执行。
  • 当有IO操作准备就绪时,由内核通知触发一个SIGIO信息处理程序执行,然后,将用户进程所需要的数据从内核空间复制到用户空间。

信号驱动IO模型的优势在于,等待数据到达期间进程不阻塞,用户主程序可以继续往下执行,直到收到来自信号处理函数的通知。
信号驱动IO模型并不常用。

异步IO模型

在这里插入图片描述

IO模型的具体实现

IO模型主要实现方式有以下几种:

  • Select
    Linux实现,对应I/O复用模型。
  • Poll
    Linux实现,对应I/O复用模型。
  • Epoll
    Linux实现,对应I/O复用模型,具有信号驱动I/O模型的某些特性。
  • Iocp
    Windows实现,对应异步I/O模型。
参考文档

电脑结构和CPU、内存、硬盘三者之间的关系

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值