高度模块化: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. tableViewCell 的删除按钮

    - (UITableViewCellEditingStyle)tableView:(UITableView*)tableView editingStyleForRowAtIndexPath:(NSIn ...

  2. NSThread 、NSRunLoop 和 Dispatch Queue

     iOS多线程编程中,NSOperation和NSOperationQueue无疑是最常用的,它们能满足绝大部分情况下的线程操作.但在完成一些特殊的任务时,我们还是要使用的NSThread和NSRun ...

  3. Postgres的用户认证

    我们先来讲讲postgresql的用户认证吧. 我想我们有必要明白以下几个问题: 第一.postgresql的用户和操作系统的用户没有任何直接的的关系.虽然在postgaresql的初始安装中,它会有 ...

  4. GStreamer Plugin: Embedded video playback halted; module decodebin20 reported: Your GStreamer installation is missing a plug-in.

    标题是在Linux下使用系统yum install 的opencv库来获取视频帧的时候抛出来的错误消息.opencv调用了Gstream的API来处理了视频.错误抛出的代码如下图: http://ub ...

  5. 转:helloworld:一个完整的WCF案例

    原文地址:http://blog.csdn.net/mane_yao/article/details/5852845 WCF的ABC: A代表Address-where(对象在哪里)B代表Bindin ...

  6. cf446A DZY Loves Sequences

    A. DZY Loves Sequences time limit per test 1 second memory limit per test 256 megabytes input standa ...

  7. batch 批处理获取系统时间

    文件test.bat,内容命令如下: @echo off set filename=%,%-%,%-%,% %,%:%,%:%,% echo %filename% pause

  8. 【转】Windows与Linux(Ubuntu)双系统时间不一致的解决方法

    当在嵌入式Linux里面备份文件时候,在备份的时候,PC(win7)和开发板的时间都是9:30,但是在开发板发现文件创建时间是9:30,然后u盘插在PC(win7)上,发现文件创建时间是1:30,为什 ...

  9. Direct3D 对X模型载入

    今天我们来学习Direct3D对模型的导入使用,Direct3D支持.X模型文件导入使用,.X文件是微软定义的3D模型文件格式,其中包含网格,动画,纹理等等一些信息. 目前3DS Max 和 Maya ...

  10. PC--CSS优化

    优化你的CSS 所谓高效的CSS就是让浏览器在查找style匹配的元素的时候尽量进行少的查找,下面列出一些我们常见的写CSS犯一些低效错误: 1.不要在ID选择器前使用标签名一般写法:DIV#divB ...