IO 模型介绍(一)|学习笔记

简介: 快速学习 IO 模型介绍

开发者学堂课程【Nginx 企业级 Web 服务实战:IO 模型介绍】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/649/detail/10751


IO 模型介绍(一)

内容介绍:

一、web 服务介绍

二、系统 I/O 模型

三、网络 I/O 模型

四、信号驱动式 IO(signal-driven IO)

五、异步(非阻塞) IO(asynchronous IO)

六、IO 对比

七、实现方式

八、常用模型汇总

九、常用模型对比

十、MMAP 介绍

十一、传统方式 copy 数据

十二、Mmap 方式


一、web 服务介绍

1.影响用户体验的几个因素:

(1)客户端硬件配置

(2)客户端与服务端距离

(3)服户端网络速率

(4)服务端硬件配置口

(5)服务端架构设计

(6)服务端应用程序工作模式

(7)服务端并发数量

(8)服务端响应文件大小及数量

(9)服务端 I/O 压力

2.应用程序工作模式:

prefork: 进程模型,两级结构,主进程 master 负责生成子进程,每个子进程负责响应一个请求

worker:线程模型,三级结构,主进程 master 负责生成子进程,每个子进程负责生成多个线程

event:线程模型,三级结构,主进程 master 负责生成子进程,每个子进程生成多个线程,每个线程是增加了一个监听线程,用于解决在设置了 keep-alived 场景下线程的空等待问题。

Nginx ( Master+Worker)模式:

主线程工作进程 #直接处理客户的请求

线程验证方式:

# cat /proc/PID/statuse

#t pstree -p PID

3.服务端 I/O:

I/O 在计算机中指 Input/Output, IOPS (Input/Output Per Second) 即每秒的输⼊输出量(或读写次数),是衡量磁盘性能的主要指标之一。

IOPS 是指的是在单位时间内系统能处理的 I/O 请求数量,⼀般以每秒处理的 I/O 请求数量为单位,I/O 请求通常为读或写数据操作请求。

(1)旋转延迟:

是指将磁盘片旋转到数据所在的扇区到磁头下面所花费的时间,旋转延迟取决于磁盘的转速,通常使用磁盘旋转一周所需要时间的1/2之一表示,比如720O 转的磁盘平均训传延迟大约为

60*1000/7200/2=4.17毫秒,公式的意思为(每分钟60秒*1000毫秒每秒/7200转每分钟/2),

如果是15000转的则为60*1000/15000/2=2毫秒。

(2)数据传输时间:

指的是读取到数据后传输数据的时间,主要取决于传输速率,这个值等于数据大小除以传输速率,目前的磁盘接口每秒的传输速度可以达到600MB,因此可以忽略不计。

(3)常见的机械磁盘平均寻道时间值:

7200转/分的磁盘平均物理寻道时间:9毫秒

10000转/分的磁盘平均物理寻道时间:6毫秒

15000转/分的磁盘平均物理寻道时间:4毫秒

(4)常见磁盘的平均延识时间:

7200转的机械盘平均延迟:60*1000/7200/2= 4.17ms

10000转的机械盘平均延迟:60*1000/10000/2 = 3ms 15000转的机械盘平均延迟:60*1000/15000/2= 2ms

(5)每秒最大 IOPS 的计算方法:

7200转的磁盘 IOPS 计算方式:1000毫秒/(9毫秒的寻道时间+4.17毫秒的平均旋转延迟时间)=1000/13.13=75.9 IOPS

10000转的磁盘的 IOPS 计算方式:1000毫秒八(6毫秒的寻道时间+3毫秒的平均旋转延迟时间)=1000/9=1110 IOPS

15000转的磁盘的 IOPS 计算方式:15000毫秒/(4毫秒的寻道时间+2毫秒的平均旋转延迟时间)=1000/6=16.6 IOPS

一次完整的 I/O 是用户空间的进程数据与内核空间的内核数据的报文的完整交换,但是由于内核空间与用户空间是严格隔离的,所以其数据交换过程中不能由用户空间的进程直接调用内核空间的内存数据,而是需要经历一次从内核空间中的内存数据 copy 到用户空间的进程内存当中,所以简单说 I/O 就是把数据从内核空间中的内存数据复制到用户空间中进程的内存当中。

而网络通信就是网络协议栈到用户空间进程的 IO 就是网络 IO

磁盘 I/O 是进程向内核发起系统调用,请求磁盘上的某个资源比如是文件或者是图片,然后内核通过相应的驱动程序将目标图片加载到内核的内存空间,加载完成之后把数据从内核内存再复制给进程内存,如果是比较大的数据也需要等待时间。

(6)每次 IO 都要经由两个阶段:

第一步:将数据从磁盘文件先加载至内核内存空间(缓冲区).此步骤需要等待数据准备完成.时间较长

第二步:将数据从内核缓冲区复制到用巨空间的进程的内存中,时间较短


二、系统 I/O 模型

1.同步/异步:

关注的是事件处理的消息通信机制,即在等待⼀件事情的处理结果时,被调用者是否提供完成通知。

同步:

synchronous,调用者等待被调用户者返回消息后才能继续执行,如果被调用者不提供消息返回则为同步,同步需要调⽤者主动询问事情是否处理完成。

异步:

asynchronous,被调用者通过状态、通知或回调机制主动通知调用者被调用者的行状态

同步︰

进程发出请求调用后,等内核返回响应以后才继续下一个请求,即如果内核一直不返回数据,那么进程就一直等。

异步︰

进程发出请求调用后,不等内核返回响应,接着处理下一个请求,Nginx 是异步的。

2.阻塞/非阻塞∶

关注调用者在等待结果返回之前所处的状态阻塞:  

blocking,指 IO 操作需要彻底完成后才返回到用户空间,调用结果返回之前,调用者被挂起,干不了别的事情。

非阻塞:  

nonblocking,指 IO 操作被调用后立即返回给用户一个状态值,无需等到 IO 操作彻底完成,最终的调用结果返回之前,调用者不会被挂起,可以去做别的事情。

相关文章
|
3月前
|
缓存 安全 Linux
Linux 五种IO模型
Linux 五种IO模型
|
29天前
|
网络协议 前端开发 Java
网络协议与IO模型
网络协议与IO模型
网络协议与IO模型
|
1月前
|
安全 NoSQL Java
一文搞懂网络通信的基石✅IO模型与零拷贝
【10月更文挑战第1天】本文深入探讨了网络通信中的IO模型及其优化方法——零拷贝技术。首先介绍了IO模型的概念及五种常见类型:同步阻塞、同步非阻塞、多路复用、信号驱动和异步IO模型。文章详细分析了每种模型的特点和适用场景,特别是多路复用和异步IO在高并发场景中的优势。接着介绍了零拷贝技术,通过DMA直接进行数据传输,避免了多次CPU拷贝,进一步提升了效率。最后总结了各种模型的优缺点,并提供了相关的代码示例和资源链接。
一文搞懂网络通信的基石✅IO模型与零拷贝
|
30天前
|
开发者
什么是面向网络的IO模型?
【10月更文挑战第6天】什么是面向网络的IO模型?
20 3
|
30天前
|
数据挖掘 开发者
网络IO模型
【10月更文挑战第6天】网络IO模型
35 3
|
30天前
|
缓存 Java Linux
硬核图解网络IO模型!
硬核图解网络IO模型!
|
1月前
|
数据挖掘 开发者
网络IO模型如何选择?
网络IO模型如何选择?【10月更文挑战第5天】
18 2
|
1月前
|
数据库
同步IO模型是一种常见的编程模型
【10月更文挑战第5天】同步IO模型是一种常见的编程模型
18 2
|
2月前
|
存储 机器人 Linux
Netty(二)-服务端网络编程常见网络IO模型讲解
Netty(二)-服务端网络编程常见网络IO模型讲解
基于套接字的IO模型
基于套接字的IO模型