浙江省高等学校教师教育理论培训

微信搜索“毛凌志岗前心得”小程序

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

关于nginx/lighttpd epoll高并发以及apache为何不采用epoll的的疑惑 - 向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除 - Life is Short,Play it More,So Playin' with IT,Focus on Killer Application,Marketing Meets Technology.︻┳═一 Ζ〧φ﹀ヘ -

关于nginx/lighttpd epoll高并发以及apache为何不采用epoll的的疑惑 不指定

WEB2.0 root 2010-3-13 17:24 评论(0) 阅读(2051) | |
ginx/lighttpd等web server 采用epoll+单进程模式能支持并发几w的并发。但有个问题一直没搞明白,如果单进程的话,来个请求肯定得read/write操作吧,如果get数据很大的话(如sleep 1000),单进程服务串行处理请求还不得严重阻塞啊?? ,请大牛们解惑   ;对于apache进程+线程池的并发处理就比较好理解

而且epoll模式是非阻塞的,应该不会存在sleep 1000什么的.问题可能存在于处理数据的效率上吧...可以考虑分离吧使用非阻塞模式做I/O操作需检查errno是不是EAGAIN、EWOULDBLOCK、EINTR,如果是就需要循环重读,也就非阻塞处理IO时间与阻塞是一样,只是非阻塞能立即返回而且,你得人工去重复处理数据,还是需要等很长时间
单线程epoll ET,处理几万个并发连接是小case,LT模式都能处理上万并发连接,只是LT时CPU占用是居高不下。

单线程但并不是单线程啊! nginx 多线程的, 底下真正做事时还是一个线程伺候一个client的, 但accept()是在主线程统一处理的 ...

nginx/lighttpd之类只是取巧于各种常用web应用的多数情况, 如果您用nginx,lighttpd的web服务器处理论坛等高度发, 高复杂的业务时, 它们也没什么优势的, 甚至不如apache

如果这样的话,nginx还是会用到类似线程池技术罗??  之前粗略看了看lighttpd源码结构,没有用到线程池,一般情况是单进程,考虑多CPU情况也可以fork几个worker进程,但不像apache好几百的进程摆在那



ighttpd和nginx采用异步服务器模式,epoll模式,为何apache不采用这个模式,可以提高并发性能?

个人理解:
1. apache的模块大都是采用select模式开发,换到epoll模式不容易?

2. 跨平台问题,epoll模式只在linux2.6内核上有,其他平台无法实现,那么可以搞个支持epoll模式的apache新版本,叫apache3.0也可以啊

3.对于apache模块话其实没有必要去学习epool,相对php处理一些复杂的逻辑运算可能稳定性会比nginx更好更稳定(我自己加的一条)
但是apache有很多模块是阻塞方式运行的,所以需要每个请求开启一个线程/进程,这跟worker没什么区别。线程/进程之间切换时要一定代价的,另外也并不能发挥event非阻塞的优势。
我觉得,apache本身的线程模式与event非阻塞方式是有冲突的。再加上现有很多apache模块是用阻塞方式来写的,所以我觉得要完全移植很难。
如果楼主一定要用的话,建议还是用lighttpd或nginx吧,apache现在主要还是定位于功能强大的后端服务器。
前几天用apache-2.2.11的event模式和nginx-0.7.30的epoll模式做了下简单对比  同样7万个连接 apache只撑了大概15分钟后就已经不能提供服务了 在前15分钟能访问到后端的连接数也很少 相比使用nginx顶7万个连接 在系统负载和cpu消耗上nginx都占有优势 至少我用nginx来跑7万并发的静态图片到现在还没挂过 不错 呵呵
posted on 2013-03-26 23:05  lexus  阅读(1465)  评论(1编辑  收藏  举报