高度模块化:DSO
MPM:多路处理模块
     prefork-->一个主进程+多个工作进程,每个工作进程处理多个请求
     worker-->一个主进程+多个工作进程,每个工作进程派生多个工作线程,每个线程处理一个请求
     event(2.4版本)-->一个主进程+多个工作进程,每个工作进程处理多个请求,不过是根据事件驱动模式来处理请求

系统调用分两个过程:数据从进程-->内核|数据从内核-->进程
只要有一个过程被阻塞,就是同步

异步IO主要应用于文件IO。在同步在编程里,一般是指只有在某个IO操作执行完后可以执行后面的操作。异步则是将某个操作给系统,主线程继续执行别的操作,而由内核完成操作后去负责通知主线程异步操作已经完成。


同步:指进程发出一个过程(功能、函数)调用后,在没有得到结果之前,该调用将不会返回。

异步:指进程发出一个过程(功能、函数)调用后,调用者不能立刻得到结果,但调用会返回。调用完成后,内核通过状态、通知和回调来通知调用者。

同步IO操作会导致请求进程阻塞,直到I/O操作完成;异步I/O操作不导致请求进程阻塞。--同步才有阻塞,异步没有阻塞

阻塞:阻塞调用是指调用结果返回之前,当前线程会被挂起(线程进入睡眠状态)。函数只有在得到结果之后才会返回。

非阻塞:指在不能立刻得到结果之前,被调用函数不会阻塞当前线程,而会立刻返回。


同步阻塞-->
进程接到用户请求,发起系统调用,提交给内核
内核接到调用后,并不会返回一个resv函数信号,且进程也会进入睡眠/挂起状态--阻塞
内核调用完毕后,告知进程,进程再次执行系统调用,将数据从内核空间复制到用户空间--阻塞
进程继续执行
同步非阻塞-->
进程接到用户请求,发起系统调用,提交给内核
内核接到调用,至处理完毕钱,进程会不断询问是否调用完毕,期间内核会返回一个错误信息,告知进程调用没有完成,这个过程叫做忙等待
(忙等待状态下,进程不会睡眠/挂起,但是也不会去接收请求)--非阻塞(忙等待)
内核调用完毕后,告知进程,进程再次执行系统调用,将数据从内核空间复制到用户空间--阻塞
进程继续执行
I/O复用-->apache的prefork模型基于select
进程接到用户请求,通过select/poll函数,代它发起系统调用
(select/poll函数的特点是可以同时发起多个系统调用,也就是说可以同时接收多个请求,如此以来,第一阶段的系统调用就不会被阻塞)--伪非阻塞(其实依然是阻塞,只不过阻塞到了select上,select会一次询问所有调用,而不是一个一个询问,因此这种瞬间一次遍历询问,性能并不一定会比同步非阻塞好)
(apache的prefork模型就是基于select函数实现,即一个工作进程通过select函数发起多个请求)
内核调用完毕后,会针对处理完毕调用,返回一个可读信号,由复用函数告知进程,从而使进程发起系统调用,将数据从内核空间复制到用户空间--阻塞
进程继续执行
事件驱动模型-->apache的event和nginx
进程接到用户请求,调用事件驱动回调函数sigaction,然后发起系统调用,提交给内核
内核接到调用后,会返回一个事件信号,告知进程可以先继续执行--非阻塞
当内核调用完毕后,会再返回一个事件信号,告知进程已经调用完毕,可以复制,此时,进程发起系统调用,复制数据到用户空间 -- 阻塞
(返回事件信号分两种:
第一种水平触发-->是不断返回直至进程过来复制
第二种边缘触发-->是通知一次,通知会一直处于提醒等待状态,但是有个超时时间
)
进程继续执行
异步非阻塞-->
进程接到用户请求,调用aio_read函数,提交系统调用的同时,告知内核进程缓冲区的位置/大小等
内核接到调用后,,返回一个信号,告知进程可以先继续执行--非阻塞
当内核调用完毕后,会根据缓冲区的位置和大小,主动将数据复制到缓冲区,同时告知进程,已经处理完毕,故进程不需要再次系统调用 -- 非阻塞
进程继续执行

这5种模型都会在系统调用的第二部分进行复制,那么内存映射mmap就不需要复制,性能更佳!
(内存映射(mmap):内核接到系统调用后,将其放到内核空间中A位置,并告知进程,进程将进程空间映射到内存空间的A位置,从而直接读取,免去了复制的问题,这样子,系统调用的第二部分也不存在阻塞了)

附件列表

HTTP之I/O模型图MPM详细解析的更多相关文章

  1. 如何将Sql server数据库中的模型图转化到Word中--并能够查看字段的属性信息

    1. 在Sql server数据库中创建数据库的模型图 -- Database Diagrams 2. 控制面板--管理工具--ODBC数据源链接--创建一个Sql server的数据源链接 3. 打 ...

  2. 【转】JDK5.0中JVM堆模型、GC垃圾收集详细解析

    基本概念 堆/Heap JVM管理的内存叫堆:在32Bit操作系统上有4G的限制,一般来说Windows下为2G,而Linux下为3G:64Bit的就没有这个限制.JVM初始分配的内存由-Xms指定, ...

  3. UML动态模型图简单介绍

    UML动态模型图描述了系统动态行为的各个方面,包括用例图.序列图.协作图.活动图和状态图.下面就每种图做一个简单介绍: 用例图 用例图描述系统外部的执行者与系统提供的用例之间的某种联系.所谓用例是指对 ...

  4. flex盒模型 详细解析

    flex盒模型 详细解析 移动端页面布局,采用盒模型布局,效果很好 /* ============================================================    ...

  5. 桥接模式_NAT模式_仅主机模式_模型图.ziw

      2017年1月12日, 星期四 桥接模式_NAT模式_仅主机模式_模型图   null

  6. 【转】Visio画用例模型图竟然没有include关系

    转自:http://blog.csdn.net/shuixin536/article/details/8289746 由于电脑上没有安装Rose,因此决定用visio来画UML中的用例模型图,在绘制的 ...

  7. UML的九种模型图

    本文转自UML 的九种模型图,仅供学习交流! 一.作为一种建模语言,UML的定义包括UML语义和UML表示法两个部分. UML语义:描述基于UML的精确元模型定义. UML表示法:定义UML符号的表示 ...

  8. 数据库设计规范、E-R图、模型图

    (1)数据库设计的优劣: 糟糕的数据库设计: ①数据冗余冗余.存储空间浪费. ②数据更新和插入异常. ③程序性能差. 良好的数据库设计 ①节省数据的存储空间. ②能够保证数据的完整新. ③方便进行数据 ...

  9. C++多态的实现及原理详细解析

    C++多态的实现及原理详细解析 作者: 字体:[增加 减小] 类型:转载   C++的多态性用一句话概括就是:在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型 ...

随机推荐

  1. 文件:一个任务 - 零基础入门学习Python029

    文件:一个任务 让编程改变世界 Change the world by program 一个任务 这节课,我们需要一起来完成一个任务:将文件(record.txt)中的数据进行分割并按照以下规律保存起 ...

  2. Hadoop学习笔记-HDFS命令

    进入 $HADOOP/bin 一.文件操作 文件操作 类似于正常的linux操作前面加上“hdfs dfs -” 前缀也可以写成hadoop而不用hdfs,但终端中显示 Use of this scr ...

  3. 域控制器安全策略在哪里 Windows server 2008

    Start(开始)–Programs(程序)–Administrative Tools(管理工具)–Group Policy Management(策略管理器) 展开组策略管理器选择–Forest(林 ...

  4. Array vs Linked List

    Access: Random / Sequential 1. Array element can be randomly accessed using index 2. Random access f ...

  5. (转)linux下fork的运行机制

    转载http://www.cnblogs.com/leoo2sk/archive/2009/12/11/talk-about-fork-in-linux.html 给出如下C程序,在linux下使用g ...

  6. 让 SpringMVC 接收多个对象的4种方法

    问题背景: 我要在一个表单里同时一次性提交多名乘客的个人信息到SpringMVC,前端HTML和SpringMVC Controller里该如何处理? 第1种方法:表单提交,以字段数组接收: 第2种方 ...

  7. 飘逸的python - 性能调优利器profile及其意义

    VIM 的作者Bram Moolenaar在一篇叫高效文本编辑器的7个习惯的ppt中有这么一段话. Three basic steps 1.    Detect inefficiency 2.    ...

  8. fcitx 输入框纵向

    打开~/.config/fcitx/conf/fcitx-classic-ui.config 找到下面的:# 竖排候选词列表# 可选值:# True False#VerticalList=True-- ...

  9. 《招聘一个靠谱的iOS》面试题参考答案(上)

    说明:面试题来源是微博@我就叫Sunny怎么了的这篇博文:<招聘一个靠谱的 iOS>,其中共55题,除第一题为纠错题外,其他54道均为简答题. 博文中给出了高质量的面试题,但是未给出答案, ...

  10. POJ 2524 并查集

    Ubiquitous Religions Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 23580 Accepted: 1160 ...