- 论坛徽章:
- 0
|
原帖由 GNM 于 2009-6-8 13:37 发表 ![]()
nginx/lighttpd等web server 采用epoll+单进程模式能支持并发几w的并发。但有个问题一直没搞明白,如果单进程的话,来个请求肯定得read/write操作吧,如果get数据很大的话(如sleep 1000),单进程服务串行处理请求还不得严重阻塞啊?? ,请大牛们解惑 ;对于apache进程+线程池的并发处理就比较好理解了
如果单纯对于这个问题来说, lighttpd使用类似流水线的方式读取来自客户端的数据和向客户端发送响应数据, 在一个周期内, 每一个连接发送/读取一段数据. 如果请求的是小文件, 在一个或者少量的周期内即可响应完毕. 对于这些请求, 不存在延时; 如果请求的是大文件, 可能需要上百个周期或者更多的周期才能响应完毕, 这就是严重的延时. 但是, 一个连接不会被其它请求"严重阻塞".
当然, 上面的分析是上大量的连接是闲置的情况, 也即在一个周期内, 由于网络数据未准备好, 这些连接既不会读取, 也不会写. 如果几十K个连接都是活跃的, 那么, 显然已经达到了服务器的计算能力之外, 这时, 除非增加硬件, 即使在单台服务器上使用何种算法(epoll, iocp, 多线程, 多进程)都没有用. |
|