httpd服务归纳:浅谈I/O模型

nginx 利用 rewrite 屏蔽IE浏览器

1. 四种理论的I/O模型

1) 调用者(服务进程):

阻塞: 进程发起I/O调用,如果调用为完成,进程被挂起休眠,不能再执行其他功能

非阻塞:进程发起I/O调用,被调用的函数完成之前,依然可以执行其他功能

2) 被调用函数或过程(系统调用I/O读写操作)

同步: 函数或功能被进程调用时,不立即返回值,直到此调用完成

异步: 函数或功能被进程调用时,不能立即完成则返回未完成状态,完成后通知调用进程

3)四中理论模型

同步阻塞

同步非阻塞(几乎没人使用)

异步阻塞

异步非阻塞: 真正的异步I/O

2. 五种网络服务中的I/O模型

1) 同步阻塞模型

工作进程调用I/O请求库函数后,工作进程被阻塞等待I/O完成第一阶段,数据从硬盘加载到内核空间,此时工作进程在库函数返回数据之前继续被阻塞参与完成第二阶段数据从内核空间复制到用户进程空间的过程,最后拿到数据。

2)I/O复用(同步阻塞模型):select(), poll()

工作进程调用一个管理I/O的特殊库函数,此库函数可以接受并管理多个I/O请求,工作进程则可以同时等待多个I/O请求,虽然是阻塞,但是阻塞在多个进程上,可以提高效率。第二阶段依然需要工作进程参与库函数把内核空间数据复制到用户空间,第二阶段依旧阻塞。

3) 同步非阻塞(盲等待模型)

工作进程调用I/O库函数,工作进程不需要I/O完成依旧可以处理其他事物,但是需要反复查看I/O是否完成。第二阶段依然需要工作进程参与库函数把内核空间数据复制到用户空间,第二阶段依旧阻塞。

4) 事件触发模型(同步非阻塞): epoll(), kqueue()

工作进程调用I/O库函数,工作进程不需要等待I/O完成,内核空间I/O完成后会通过事件通知进程。第二阶段依然需要工作进程参与库函数把内核空间数据复制到用户空间,第二阶段依旧阻塞。

5) 全异步:AlO 调用

全异步1: 工作进程调用I/O库函数,工作进程不需要等待I/O完成,内核空间I/O完成后会通过事件通知进程。第二阶段不需要工作进程参与库函数把内核空间数据复制到用户空间,库函数完成复制后自行返回数据给工作进程

全异步2: 工作进程调用I/O库函数,工作进程不需要等待I/O完成,内核空间I/O完成后会通过事件通知进程。第二阶段不需要库函数从内核空间复制数据,而是通过内存映射来实现(mmap)。

实现以上功能,libevent 库

原文发布于微信公众号 - 马哥Linux运维(magedu-Linux)

原文发表时间:2015-06-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏游戏杂谈

替换系统自带的记事本

系统自带的记事本功能比较弱,所以一般我会选择使用notepad2.exe来替代它。

2963
来自专栏后端技术探索

狼厂项目实践:通用检索框架准实时流的设计与实现

检索对实时性的要求很高,不仅是对索引建立、结果召回、策略干扰等核心部分,也包括数据录入的部分。检索的数据流主要包括全量数据与增量数据,其中全量数据是在运行前就已...

921
来自专栏精讲JAVA

MySQL 中的重做日志,回滚日志以及二进制日志的简单总结

来源:MSSQL123 , www.cnblogs.com/wy123/p/8365234.html 转自:ImportNew MySQL中有六种日志文件,分别...

7157
来自专栏钟绍威的专栏

scope='request'的bean预加载冲突

Error creating bean with name ‘authenticationSuccessServlet’: Scope ‘request’ is...

1976
来自专栏开源优测

AutoLine源码分析之前端js代码分析

html模板负责UI显示 - js负责前端逻辑 -python api负责后端逻辑

661
来自专栏Python自动化测试

Python接口自动化测试之文件上传(二十二)

在接口测试中,经常会涉及到文件上传,文件上传一般包含的文件是图片,视频以及如csv,excel,记事本等文件,它的请求头中Content-Type对应...

8833
来自专栏iOS122-移动混合开发研究院

【最新版】从零开始在 macOS 上配置 Lua 开发环境

脚本语言,你可能更需要的是 Lua 不同的脚本语言有不同的特性,第一接触的脚本语言,可能会影响自己对整个脚本语言的理解和认知。我以前接触最多的脚本语言是 Jav...

3705
来自专栏北京马哥教育

httpd服务归纳:浅谈I/O模型

1. 四种理论的I/O模型 1) 调用者(服务进程): 阻塞: 进程发起I/O调用,如果调用为完成,进程被挂起休眠,不能再执行其他功...

2888
来自专栏互联网技术栈

Tair数据迁移三步走

在多机房数据迁移中,整个过程分为三个阶段:历史数据迁移阶段、redolog迁移阶段、实时复制阶段。

1193
来自专栏编程坑太多

『中级篇』docker的数据持久化存储和数据共享(32)

PS:源码https://github.com/limingios/docker No.3 方便学习数据持久化存储

2234

扫码关注云+社区

领取腾讯云代金券