I/O模型和原理,以及简单解析客户端请求WEB服务器内部处理过程,MPM三种模
2014-08-17 11:07
721 查看
一.apache三种MPM对比。
1.)什么是MPM,看看官网的介绍:
2.)preforkMPM:
多路处理模块(MPM),实现了一个非线程型的,预派生的WEB服务器模型,它适用于没有线程安全库,需要避免线程兼容的系统。它是将每个请求相互独立的情况下最好的MPM,单个请求出现问题,不会影响到其他的MPM。
3.)workerMPM:
多路处理模块,支持混合线程,使用线程来处理请求,系统资源开销小于进程的MPM。使用了多个进程,每个进程又会生成多个线程,使得基于进程MPM的稳定性,如果挂掉一个进程,那么进程下的所有线程都会被影响。
4.)prefork对比worker:
prefork模式使用多个子进程,每个子进程一个线程,每个进程响应一个请求。大多数平台上,prefork在效率上要比worker高,但是内存及系统资源开销大。
worker模式使用多个子进程,每个进程生成多个线程,每个线程响应一个请求。在高并发的大流量的的服务器上,worker是一个比较不错的选择。内存占用开销小。
5.)nginx的event模式和apache的event的模式:
都是多线程,每个线程处理多个请求。
apache的event模式是信号驱动I/O。
nginx的event模式是异步I/O。
二.先来简单了解下客户端是怎么请求web服务器资源的。
客户端基于网络发起请求(tcp socket通信模型),socket是位于domain中,domain有三种模型,unixdomain,每个socket地址是一个文件路径。ipv4domain是ipv4地址加上一个端口。ipv6 domain…。服务器接收到请求后,网卡看到ip地址就是本机内核所配置的地址,拆除ip首部封装,内核这个时候就看到了端口号,然后找到端口号对应的进程。数据不会直接交给进程处理,而是将数据缓存到内核内存上,等着数据全部加载完成后,复制到进程内存空间。进程开始处理数据,发现数据在磁盘的某个路径下,进程开始交给子进程去寻找数据,子进程没有访问磁盘的权限,而是发起一个软中断,转换为内核模式到磁盘读取数据。内核到磁盘找到数据库,开始向自己(内核内存)的内存缓存数据流,数据全部加载完毕后,内核通知子进程过来读取数据,子进程将数据返回给进程,进程在交给内核,内核开始封装tcp首部,ip首部,通过网卡返回给客户端。
三.I/O
1.)阻塞I/O:
进程发起I/O调用,数据准备未完成之前,内核将进程转换为不可中断睡眠,这是阻塞。而内核将数据准备完成后,由内核内存空间复制到进程空间称为I/O。
2.)非阻塞I/O:
进程发起I/O调用,被调用函数完成前,不会阻塞当前进程,而是立即返回,开始盲等待。
3.)同步I/O:
进程发起一个过程调用后,在没有得到返回结果之前,该调用不会返回。
4.)异步I/O:进程发起一个过程调用后,即使被调用者不能立即将数据准备好,会返回未完成的结果,数据准备完成后,内核通知进程数据准备完毕,可以读取。
四.五种I/O模型:
1.)同步阻塞
2.)异步非阻塞
3)I/O复用模型:
一个进程处理多个I/O,同时处理监听套接字,请求套接字。
4.)信号驱动I/O:
进程发起I/O调用,进程会继续运行,但不会阻塞。当数据准备完成后,进程过接收到一个SIGIO信号,通知进程数据准备完成。
5.)异步I/O:
进程发起I/O调用,进程继续运行,不会阻塞,当数据准备完成后,由内核内存空间复制带进程内存空间后,通知进程I/O完成。
五种I/O模型对比:
1.)什么是MPM,看看官网的介绍:
2.)preforkMPM:
多路处理模块(MPM),实现了一个非线程型的,预派生的WEB服务器模型,它适用于没有线程安全库,需要避免线程兼容的系统。它是将每个请求相互独立的情况下最好的MPM,单个请求出现问题,不会影响到其他的MPM。
3.)workerMPM:
多路处理模块,支持混合线程,使用线程来处理请求,系统资源开销小于进程的MPM。使用了多个进程,每个进程又会生成多个线程,使得基于进程MPM的稳定性,如果挂掉一个进程,那么进程下的所有线程都会被影响。
4.)prefork对比worker:
prefork模式使用多个子进程,每个子进程一个线程,每个进程响应一个请求。大多数平台上,prefork在效率上要比worker高,但是内存及系统资源开销大。
worker模式使用多个子进程,每个进程生成多个线程,每个线程响应一个请求。在高并发的大流量的的服务器上,worker是一个比较不错的选择。内存占用开销小。
5.)nginx的event模式和apache的event的模式:
都是多线程,每个线程处理多个请求。
apache的event模式是信号驱动I/O。
nginx的event模式是异步I/O。
二.先来简单了解下客户端是怎么请求web服务器资源的。
客户端基于网络发起请求(tcp socket通信模型),socket是位于domain中,domain有三种模型,unixdomain,每个socket地址是一个文件路径。ipv4domain是ipv4地址加上一个端口。ipv6 domain…。服务器接收到请求后,网卡看到ip地址就是本机内核所配置的地址,拆除ip首部封装,内核这个时候就看到了端口号,然后找到端口号对应的进程。数据不会直接交给进程处理,而是将数据缓存到内核内存上,等着数据全部加载完成后,复制到进程内存空间。进程开始处理数据,发现数据在磁盘的某个路径下,进程开始交给子进程去寻找数据,子进程没有访问磁盘的权限,而是发起一个软中断,转换为内核模式到磁盘读取数据。内核到磁盘找到数据库,开始向自己(内核内存)的内存缓存数据流,数据全部加载完毕后,内核通知子进程过来读取数据,子进程将数据返回给进程,进程在交给内核,内核开始封装tcp首部,ip首部,通过网卡返回给客户端。
三.I/O
1.)阻塞I/O:
进程发起I/O调用,数据准备未完成之前,内核将进程转换为不可中断睡眠,这是阻塞。而内核将数据准备完成后,由内核内存空间复制到进程空间称为I/O。
2.)非阻塞I/O:
进程发起I/O调用,被调用函数完成前,不会阻塞当前进程,而是立即返回,开始盲等待。
3.)同步I/O:
进程发起一个过程调用后,在没有得到返回结果之前,该调用不会返回。
4.)异步I/O:进程发起一个过程调用后,即使被调用者不能立即将数据准备好,会返回未完成的结果,数据准备完成后,内核通知进程数据准备完毕,可以读取。
四.五种I/O模型:
1.)同步阻塞
2.)异步非阻塞
3)I/O复用模型:
一个进程处理多个I/O,同时处理监听套接字,请求套接字。
4.)信号驱动I/O:
进程发起I/O调用,进程会继续运行,但不会阻塞。当数据准备完成后,进程过接收到一个SIGIO信号,通知进程数据准备完成。
5.)异步I/O:
进程发起I/O调用,进程继续运行,不会阻塞,当数据准备完成后,由内核内存空间复制带进程内存空间后,通知进程I/O完成。
五种I/O模型对比:
相关文章推荐
- Web 服务器处理客户端请求过程
- Nginx 之三:nginx服务器模块、web请求处理机制及事件驱动模型、进程功能和进程间通信
- 由于内部错误,服务器无法处理该请求。有关该错误的详细信息,请打开服务器上的 IncludeExceptionDetailInFaults (从 ServiceBehaviorAttribute 或从 <serviceDebug> 配置行为)以便将异常信息发送回客户端,或打开对每个 Microsoft .NET Framework SDK 文档的跟踪并检查服务器跟踪日志。
- (译)Web是如何工作的(2):客户端-服务器模型,以及Web应用程序的结构
- HTTP核心模块配置静态web服务器 8-对客户端请求的特殊处理
- Darwin Streaming Server中RTSP请求的处理过程(Darwin流媒体服务器解析2)
- web服务器和客户端完成并行处理请求三大方式
- Vue------第五天(Vue的Ajax请求,使用Axios,目前熟悉了一下,主要包括GET请求、POST请求、并发请求、请求参数的配置、服务器响应的结构以及对服务器响应错误的简单处理)
- IIS服务器处理页面请求的简单过程
- 由于内部错误,服务器无法处理该请求。有关该错误的详细信息,请打开服务器上的 IncludeExceptionDetailInFaults (从 ServiceBehaviorAttribute 或从 <serviceDebug> 配置行为)以便将异常信息发送回客户端,
- HttpURLConnection从客户端向服务器发送Http请求以及服务器响应全过程解析
- Http协议简单解析及web请求过程
- 【总结】从客户端请求页面(aspx)到web服务器上执行的过程
- XP下解决“system.web.services.protocols.soapexception:服务器无法处理请求。…〉system.exception:system.data.oracleclient 需要oracle客户端软件8.1.7或更高版本。
- Darwin Streaming Server中RTSP请求的处理过程(Darwin流媒体服务器解析2)
- tomcat 讲解 原理以及请求处理过程
- tomcat原理,一个客户端请求的处理过程
- java基础:Web服务器原理 以及 用java简单实现
- Nginx 之三:nginx服务器模块、web请求处理机制及事件驱动模型、进程功能和进程间通信
- Sys.WebForms.PageRequestManagerServerErrorException: 在服务器上处理请求时出现未知错误。服务器返回的状态码为: 500