cgi与fastcgi的区别

青石街有两个卖烧饼的,王大与李二。

顾客很少。

王大很闲。每次有顾客,王大就生火、和面、擀饼、下炉、出锅。不出一会儿,热腾腾的烧饼就送到顾客面前。顾客走后,王大就收拾炉子,熄火休息。

李二却很忙。每天早晨,李二就生火、和面,等着顾客上门。白天里,顾客来,李二就擀饼、下炉、出锅,然后等下一位顾客。直到夜幕降临,李二才打烊。

后来青石街城镇化 ,人多起来,买烧饼的人也多了。

王大很忙。每个顾客来,都要生火、和面、熄火 ,不胜其烦;顾客的等待时间在延长,不满情绪在酝酿。

李二也很忙,不过还是和以前一样,不太累,顾客也满意。

故事很傻,勿喷啊,讲的是cgi与fastcgi的区别。

cgi像王大。每次请求,web服务器都会根据请求的内容,fork一个新进程来运行外部程序或解释器, 这个进程会把处理完的数据返回给web服务器,最后web服务器把内容发送给用户,刚才fork的进程也随之退出。 如果下次用户还请求该动态脚本,那么web服务器又再次fork一个新进程,周而复始的进行。

fastcgi像李二。web服务器启动时,就开启一个进程来等待请求。收到一个请求时,不会重新fork一个进程(因为这个进程在web服务器启动时就开启了,而且不会退出),web服务器直接把内容传递给这个进程(进程间通信,但fastcgi使用了别的方式,tcp方式通信),这个进程收到请求后进行处理,把结果返回给web服务器,最后自己接着等待下一个请求的到来,而不是退出。

总结一下:

在web服务器方面

cgi:fork一个新的进程进行处理

fastcgi:用tcp方式跟远程机子上的进程或本地进程建立连接

在对数据进行处理的进程方面

cgi:读取参数,处理数据,然后就结束生命期

fastcgi: 要开启tcp端口,进入循环,等待数据的到来,处理数据

参考资料:http://www.cnblogs.com/jamesbd/p/3567682.html

Published: January 25 2015

blog comments powered by Disqus