CGI、mod_php与FastCGI之间的区别

来源:互联网 发布:mac sunlime3 注册码 编辑:程序博客网 时间:2024/05/17 01:52

现在的CGI基本没人使用,不安全以及性能极其低下,越来越多的使用web内置扩展、fastCGI。例如微软iis的ISAPI,apache的php模块,nginx的php-cgi。CGI、内置模块、fastcgi这三种性能最好的要属于fast_cgi速度最快,但是需要额外的进程。解析来看看CGI和FASTCGI有什么不同.
CGI方式介绍:
cgi在2000年或更早的时候用得比较多,以前web服务器一般只处理静态的请求,如果碰到一个动态请求怎么办呢?web服务器会根据这次请求的内容,然后会fork一个新进程来运行外部c程序(或perl脚本...), 这个进程会把处理完的数据返回给web服务器,最后web服务器把内容发送给用户,刚才fork的进程也随之退出。 如果下次用户还请求改动态脚本,那么web服务器又再次fork一个新进程,周而复始的进行。

web内置模块介绍:
后来出现了一种更高级的方式是, web服务器可以内置perl解释器或php解释器。 也就是说这些解释器做成模块的方式,web服务器会在启动的时候就启动这些解释器。 当有新的动态请求进来时,web服务器就是自己解析这些perl或php脚本,省得重新fork一个进程,效率提高了。

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

fastcgi跟cgi的区别表格:

名称在web服务器方面在对数据进行处理的进程方面cgifork一个新的进程进行处理读取参数,处理数据,然后就结束生命期fastcgi用tcp方式跟远程机子上的进程或本地进程建立连接要开启tcp端口,进入循环,等待数据的到来,处理数据

举个例子: 服务端现在有个10万个字单词, 客户每次会发来一个字符串,问以这个字符串为前缀的单词有多少个。 那么可以写一个程序,这个程序会建一棵trie树,然后每次用户请求过来时可以直接到这个trie去查找。 但是如果以cgi的方式的话,这次请求结束后这课trie也就没了,等下次再启动该进程时,又要新建一棵trie树,这样的效率就太低下了。   而用fastcgi的方式的话,这课trie树在进程启动时建立,以后就可以直接在trie树上查询指定的前缀了。

CGI工作原理:每当客户请求CGI的时候,WEB服务器就请求操作系统生成一个新的CGI解释器进程(如php-cgi.exe),当CGI满足要求后,WEB服务器就杀死这个进程。
    所以,CGI解释器的反复加载是CGI性能低下的主要原因如果CGI解释器保持在内存中并接受FastCGI进程管理器调度,则可以 提供良好的性能、伸缩性、Fail- Over特性等等。

    FastCGI的官方站点在http://www.fastcgi.com

  FastCGI的工作原理是:
  1、Web Server 启动时载入FastCGI进程管理器【PHP的FastCGI进程管理器是PHP-FPM(php-FastCGI Process Manager)】
  2、FastCGI进程管理器自身初始化,启动多个CGI解释器进程 (在任务管理器中可见多个php-cgi.exe)并等待来自Web Server的连接。启动php-cgi FastCGI进程时,可以配置以TCP和UNIX套接字(socket)两种方式启动。
  3、当客户端请求到达Web Server时,Web Server将请求采用TCP协议或socket方式转发到FastCGI主进程,FastCGI主进程选择并连接到一个CGI解释器(子进程php-cgi.exe)。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi.exe。
   4、FastCGI子进程php-cgi.ex完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在 WebServer中)的下一个连接。 而在CGI中,php-cgi子进程在此便被退出了。

  在上述情况中,你可以想象 CGI通常有多慢。每一个Web请求PHP都必须重新解析php.ini、重新载入全部dll扩展并重初始化全部数据结构。使用FastCGI,所有这些 都只在进程启动时发生一次。一个额外的好处是,持续数据库连接可以工作。
可以令PHP程序从原来的请求-启动-运行到请求-运行模式,大大提高了脚本的执行效率,减轻服务器的负荷。

二:PHP的FastCGI的优点:
1.php脚本运行速度更快,php解释程序被载入内存而不是每次需要时从存储器读取,极大提升了依靠脚本运行站点的性能。
2.需要使用的系统资源更少,由于服务器不用在每次需要时都载入php解释程序,你可以将站点的传输速度提升很多而不必增加cpu负担。

0 0
原创粉丝点击