web优化必须了解的原理之I/o的五种模型和web的三种工作模式

简介:

web优化必须了解的原理之I/o的五种模型和web的三种工作模式

===========================================

图解五种I/O模型

图解web支持的三种工作模式

===========================================


 五种I/O:

 1)阻塞I/0

 2)非阻塞I/O

 3I/O复用

 4)事件(信号)驱动I/O

 5)异步I/O

为什么要发起系统调用?

    因为进程想要获取磁盘中的数据,而能和硬件打交道的只能是内核,进程通知内核说我要磁盘中的数据,此过程就是系统调用。


一次I/O的完成的步骤

    当进程发起系统调用时,这个系统调用就进入内核模式,然后开始I/O操作

I/O操作分为两个步骤;

    1、磁盘把数据装载到内核的内存空间,

    2、内核的内存空间的数据copy到用户的内存空间中(此过程是I/O发生的地方)


以下是进程获取数据的详细图解过程;

205126317.png


     整个过程:此进程需要对磁盘中的数据进行操作,则会向内核发起一个系统调用,然后此进程,将会被切换出去,此进程会被挂起或者进入睡眠状态,也叫不可中断的睡眠,因为数据还没有得到,只有等到系统调用的结果完成后,则进程会被唤醒,继续接下来的操作,从系统调用的开始到系统调用结束经过的步骤:

①进程向内核发起一个系统调用,

②内核接收到系统调用,知道是对文件的请求,于是告诉磁盘,把文件读取出来

③磁盘接收到来着内核的命令后,把文件载入到内核的内存空间里面

④内核的内存空间接收到数据之后,把数据copy到用户进程的内存空间(此过程是I/O发生的地方)

⑤进程内存空间得到数据后,给内核发送通知

⑥内核把接收到的通知回复给进程,此过程为唤醒进程,然后进程得到数据,进行下一步操作


I/O发生的地方才会出现阻塞或非阻塞

    阻塞:进程发起I/O调用,进程又不得不等待I/O的完成,此时CPU把进程切换出去,进程处于睡眠状态则此过程为阻塞I/O

    阻塞I/O系统怎么通知进程?

       I/O完成,系统直接通知进程,则进程被唤醒

阻塞I/O的图解

205500239.png

  非阻塞:进程发起I/O调用,I/O自己知道需过一段时间完成,就立即通知进程进行别的操作,则为非阻塞I/O

非阻塞I/O,系统怎么通知进程?

   每隔一段时间,问内核数据是否准备完成,系统完成后,则进程获取数据,继续执行(过程也称盲等待)


非阻塞I/O的图解:


205605819.png


I/O复用的图解:

205635176.png

事件(信号)驱动I/O的图解:

    水平触发的事件驱动机制;内核通知进程来读取数据,进程没来读取数据,内核需要一次一次的通知进程;

     边缘触发的事件驱动机制;内核只通知一次让进程来读取数据,进程可以在超时时间之内随时来读取数据。

     nginx就采用了边缘触发的事件驱动机制,这就是为什么nginx的并发性比apache好,当然nginx的性能比apache好,还有其它方面,如nginx支持异步I/O,mmap(内存映射)等等

210003879.png


异步I/O的图解:

210054915.png

  前四种I/O属于同步操作,最后的一种则属于异步操作


五种I/O模型的比较:

212627938.png

web的三种工作模式

Prefork工作原理

    主进程生成多个工作进程,由工作进程一对一的去响应客户端的请求

  图解Prefork工作原理:

084450144.png

Worker工作原理

    主进程生成多个工作进程,每个工作进程生成一个多个线程,每个线程去

响应客户端的请求

   图解Worker工作原理:

084552193.png

Event工作原理

    主进程生成多个工作进程,每个工程进程响应多个客户端的请求,当接收

到客户端的I/O操作请求后,把I/O操作交给内核执行,进程去响应其他客

户端的请求,此进程最后接到内核的通知,然后通过此进程回复客户端的

请求结果,通过事件回调函数

  图解Event工作原理:

084608255.png


    本博客是根据看相应的文章,写出的自己对I/O的理解,可能并不精确,希望广大博友多多指点,谢谢指教










本文转自 jie783213507 51CTO博客,原文链接:http://blog.51cto.com/litaotao/1289790,如需转载请自行联系原作者
目录
相关文章
|
1月前
|
网络协议 Shell 网络安全
实验目的1.编译安装httpd2.优化路径3.并将鲜花网站上传到web服务器为网页目录4.在客户机访问网站http://www.bdqn.com
实验目的1.编译安装httpd2.优化路径3.并将鲜花网站上传到web服务器为网页目录4.在客户机访问网站http://www.bdqn.com
164 0
|
8天前
|
缓存 负载均衡 数据库
优化后端性能:提升Web应用响应速度的关键策略
在当今数字化时代,Web应用的性能对于用户体验至关重要。本文探讨了如何通过优化后端架构和技术手段,提升Web应用的响应速度。从数据库优化、缓存机制到异步处理等多个方面进行了深入分析,并提出了一系列实用的优化策略,以帮助开发者更好地应对日益增长的用户访问量和复杂的业务需求。
12 1
|
1月前
|
机器学习/深度学习 前端开发 算法
利用机器学习优化Web前端性能的探索与实践
本文将介绍如何利用机器学习技术来优化Web前端性能,探讨机器学习在前端开发中的应用,以及通过实际案例展示机器学习算法对前端性能优化的效果。通过结合前端技术和机器学习,提升Web应用的用户体验和性能表现。
|
1月前
|
前端开发 JavaScript 安全
深入探索 Qt6 web模块 WebEngineCore:从基础原理到高级应用与技巧
深入探索 Qt6 web模块 WebEngineCore:从基础原理到高级应用与技巧
74 0
|
1月前
|
缓存 监控 前端开发
如何优化 Python WEB 应用程序的性能?
【2月更文挑战第27天】【2月更文挑战第93篇】如何优化 Python WEB 应用程序的性能?
|
1月前
|
存储 设计模式 前端开发
请解释 Web 应用程序的 MVC(模型-视图-控制器)架构。
【2月更文挑战第26天】【2月更文挑战第89篇】请解释 Web 应用程序的 MVC(模型-视图-控制器)架构。
|
1月前
|
监控 前端开发 JavaScript
构建高性能Web应用:前端性能优化的关键策略与实践
本文将深入探讨前端性能优化的关键策略与实践,从资源加载、渲染优化、代码压缩等多个方面提供实用的优化建议。通过对前端性能优化的深入剖析,帮助开发者全面提升Web应用的用户体验和性能表现。
|
1月前
|
缓存 前端开发 UED
构建高性能Web应用:前端资源优化与加载策略探讨
本文将深入剖析前端资源优化和加载策略,包括减少HTTP请求、使用CDN加速、异步加载、资源压缩等技术手段。通过合理的资源管理和加载策略,可以显著提升Web应用的性能和用户体验。
|
1月前
|
Web App开发 存储 搜索推荐
谈谈 Web 应用里界面图标 Icon 的显示原理
谈谈 Web 应用里界面图标 Icon 的显示原理
24 0
|
2月前
|
SQL 监控 Java
Java Web应用中数据库连接池的配置与优化
Java Web应用中数据库连接池的配置与优化