我看了一下FastCGI(fcgi-2.4.0)的来源,实际上没有分叉的迹象.如果我是正确的,Web服务器会为FastCGI模块(在其中编译或作为SO/DLL加载)执行流程,并处理主套接字(通常是端口TCP:80)的控制权.
在*nix上,FastCGI模块使用文件写锁(libfcgi/os_unix.c:989)在整个文件描述符(确实是侦听套接字)上"锁定"该套接字; 这样,当新连接收入时,只有FastCGI模块能够处理这些.传入套接字锁定在切换到HTTP req处理之前释放.
如FastCGI模块所示,不是多进程/线程(没有fork/pthread_create的内部用法)我假设通过来自n个FastCGI模块进程的Web服务器(通过OS_SpawnChild)的spwaning获得多个同时连接的并发处理.如果我们产生3个FastCGI进程(Apache调用3 x OS_SpawnChild),这是否意味着我们只能同时提供最多3个请求?
A)我对FastCGI工作方式的看法是否正确?
B)如果操作系统产生新进程/创建与本地数据库的连接的成本可以忽略不计,那么FastCGI对旧式可执行方法的优势是什么?
谢谢,Ema!:-)
FastCGI相对于正常CGI的速度增益是进程是持久的.例如,如果要打开任何数据库句柄,则可以执行一次.任何缓存都一样.
主要收获来自于不必创建新的php/perl /等.每次翻译,这需要花费大量的时间.
如果要处理多个并发连接,则必须运行多个进程FastCGI进程.FastCGI不是通过任何特殊并发处理更多连接的方法.这是一种加速单个请求的方法,这反过来将允许处理更多请求.但是,你是对的,更多并发请求需要运行更多进程.
归档时间: |
|
查看次数: |
4055 次 |
最近记录: |