上一篇介绍了所有的I/O模型,这篇介绍一下现在流行的web server是如何利用I/O模型达到高并发,高性能的服务器的。
0 . 知识回顾
从前几篇介绍,我们知道操作系统内核给我们提供了好几种I/O模型,这样我们的应用程序不用阻塞在read/write这些系统调用,而是阻塞在select/poll/epoll.当然这些系统调用帮我们检测大量的fd是否就绪,并提供非阻塞调用模式。
由于AIO模型linux 2.6内核才支持,还没有大量流行起来。 所以包括jdk 1.6 ,以及一些流行的web服务器apache,lighttpd,jetty,都是利用的是epoll模型,来设计高并发服务器。
1. 了解event based 和 thread based模型
thread based: 一个客户请求来了,web server从worker线程池分配一个线程去处理。就是说一个sockefd由一个thread去处理。
event based: 一个线程统一去处理所有的连接(socket);等到socket就绪了才分配一个worker线程池里的线程去处理。利用系统调用epoll I/O复用模型,当socket读就绪了才去调度worker线程去处理。这样对比thread based来说,某一时刻,worker线程池有大量idle线程等待着。而对于thread based模型来说,worker线程池可能已经被用完了。
现在流行的高并发,高性能webserver ,采用event based 的有:lighttpd,zeus等。
2 . 为什么event based 比thread based模型能应对高并发
thread based 缺点: 操作系统能支持的线程数有限; 占用内存高; 线程上下文切换频繁,性能下降; 很脆弱,大量的半tcp攻击就会用完资源,导致无法相应用户请求。
3. apache的MPM
apache 支持三种MPM : Prefork, worker, event;
prefork: 基于thread based 模型。per process per client的模式,一个连接一个子进程来处理的模式。是apache 1.3这个版本开始的。比较老了;基本没人用了吧。
worker: 基于thread based 模型。进程和线程混合模式, 利用per thread per client 的模式,一个连接一个线程去处理,比起prefork模式来说,更加轻量级,支持更多的并发量。
event: 基于event based 模型。worker MPM之上,但是利用event based模型,有一个单独的线程去监听和处理已连接套接字(当然是利用epoll);比起worker来说,支持更多的并发量,而且占用的内存空间跟少。
参考资料:
http://www.kegel.com/c10k.html
http://pl.atyp.us/content/tech/servers.html
http://httpd.apache.org/docs/2.2/mod/event.html
分享到:
相关推荐
Apache 2.X 支持插入式并行处理模块,称为多路处理模块(MPM)。在编译apache时必须选择也只能选择一个MPM,对类UNIX系统,有几个不同的MPM可供选择,它们会影响到apache的速度和可伸缩性。 Prefork MPM : 这个多...
event(MPM) 模块索引 描述模块的术语 mod_actions mod_alias mod_asis mod_authnz_ldap mod_authn_alias mod_authn_anon mod_authn_dbd mod_authn_dbm mod_authn_default mod_authn_file mod_authz_dbm mod_authz_...
麦克 MPM180/MPM185 TO-8封装压阻式压力敏感元件pdf,麦克 MPM180/MPM185 TO-8封装压阻式压力敏感元件
可实现mpm3808传感器采样工作 IIC程序驱动
PSP MPM转换软件
为mpm93模型软件。
apache中文手册: Apache HTTP Server Version 2.2 文档 版本说明 Apache 2.1/2.2 版本的新特性 Apache 2.0 版本的新特性 从 2.0 升级到 2.2 Apache许可证 参考手册 编译与安装 启动 停止与重新启动 运行时...
Apache 1是一个UNIX应用程序,移植到其他平台上会受到很多的限制,一些UNIX特性使得Apache 1在其他平台(如Windows和Netware)上性能较差,而Apache 2摆脱了这些特性的限制,使其成为一个真正的跨平台服务器。...
MPM4889型压力变送器产品性能说明书
书籍插件,好用 可另行下载专用模型 An experimental variant of the standard worker MPM Status
多路处理模块(MPM) 过滤器 处理器 服务器与工具 词汇表 用户指南 地址和端口绑定 配置文件 配置段 内容缓冲 内容协商 动态共享对象(DSO) 环境变量 日志文件 从URL到文件系统的映射 性能调整 安全...
CHM版 Apache2.2中文版参考手册 Apache HTTP Server Version 2.2 文档 版本说明 文档目录: Apache 2.1/2.2 版本的新特性 Apache 2.0 版本的新特性 从 2.0 升级到 2.2 Apache许可证 参考手册 编译与安装 启动...
MPM培训资料,非常适合初学者,入门和提高之用。高手肯垂顾的话,也可以瞧上一眼
包括配置文件、模块化结构、多任务并发,以及网络连接和请求读取,其中多任务并发体系结构是《Apache源代码全景分析第1卷:体系结构与核心模块》分析的重点,讨论了Prefork、Worker及WinNT三种MPM。《Apache源代码...
MPM589型电子式压力开关的产品性能说明书。
MPM/MDM580型电子式压力开关的产品性能说明书。
mpm安装包 mysql performance monitor 解压后可使用 其他依赖包不全
物质点法c语言程序,可实现三维泰勒杆问题的仿真分析。
包括配置文件、模块化结构、多任务并发,以及网络连接和请求读取,其中多任务并发体系结构是《Apache源代码全景分析第1卷:体系结构与核心模块》分析的重点,讨论了Prefork、Worker及WinNT三种MPM。《Apache源代码...