分类:
2010-07-22 17:19:59
Apache的限制
Ø 每次请求一个进程, 导致频繁fork;
Ø 频繁fork占有很多系统资源;
Ø 对于并发数的支持不多;
Ø 不易扩展性,很难功能扩充;
Ø 频繁执行CGI需要每次从文件中load。
HTTPSVR:
每个CGI子进程都会起一个线程来运行CGI的动态库,另一个主线程主要用来接收来自http服务器的请求,主线程在接收到整个完整的包之后,只对http的包头进行分析和设置环境变量,然后把http的content通过管道的方式传给另一个线程的CGI。
这种处理方式有两个问题:一个是多线程使得CGIHost在多并发的情况下,CPU切换过于频繁;第二是主线程在接收整个http之后,只对http的包头进行处理,对http包的content不做任何处理只是起到转发的作用,这样做也会使得系统对数据拷贝过于频繁,影响CGIHost的处理效率,消耗系统性能。
针对这种情况,平台架构组提出了一个解决方案,其主要思想就是:把CGI的执行程序编译成一个动态SO库,在Server启动的时候把CGI加载到内存,从而减少把CGI程序加载进内存的系统开销,每次请求的处理只需要对内存进行操作,以此来提高请求的处理能力。
QZhttp:
改进方案主要集中在简化处理过程,降低CPU和内存消耗上面:对于每个CGI的请求,最好能够利用一个单进程来处理,减少CPU的切换,这样逻辑更加清晰,调试维护更加方便。