您的位置:首页 > 产品设计 > 产品经理

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模型对比:


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐