fastcgi与cgi的区别

先讲下cgi:
cgi在2000年或更早的时候用得比较多, 以前web服务器一般只处理静态的请求,如果碰到一个动态请求怎么办呢?web服务器会根据这次请求的内容,然后会fork一个新进程来运行外部c程序(或perl脚本...), 这个进程会把处理完的数据返回给web服务器,最后web服务器把内容发送给用户,刚才fork的进程也随之退出。 如果下次用户还请求改动态脚本,那么web服务器又再次fork一个新进程,周而复始的进行。

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

fastcgi的方式是,web服务器收到一个请求时,他不会重新fork一个进程(因为这个进程在web服务器启动时就开启了,而且不会退出),web服务器直接把内容传递给这个进程(进程间通信,但fastcgi使用了别的方式,tcp方式通信),这个进程收到请求后进行处理,把结果返回给web服务器,最后自己接着等待下一个请求的到来,而不是退出。 
fastcgi跟cgi的区别是:
                  在web服务器方面                                                         在对数据进行处理的进程方面
cgi         fork一个新的进程进行处理                                           读取参数,处理数据,然后就结束生命期
fastcgi   用tcp方式跟远程机子上的进程或本地进程建立连接       要开启tcp端口,进入循环,等待数据的到来,处理数据

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

转载于:https://www.cnblogs.com/wanyp/p/5887836.html

fastcgi与cgi的区别相关推荐

  1. cgi与php的区别,fastcgi与cgi的区别

    fastcgi与cgi有什么不同 前言 现在的CGI基本没人使用,不安全以及性能极其低下,越来越多的使用web内置扩展.fastCGI.例如微软iis的ISAPI,apache的php模块,nginx ...

  2. cgi php-fpm,CGI、FastCGI、PHP-FPM的区别以及详解 | 剑花烟雨江南

    Web服务器 php是为web而生的一种后端语言,但是php也仅仅只是一种后端语言,要实现web开发, 我们需要html,javascript,css等开发语言的协助才能将网页展示在网页上.另外,我们 ...

  3. Servlet的生命周期 与CGI的区别

    2019独角兽企业重金招聘Python工程师标准>>> 对于Servlet,服务器只创建每个servlet的单一实例,每个用户请求都会引发新的线程-----将用户请求将会给相应的do ...

  4. Servlet的生命周期,及Servlet和CGI的区别

    Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销 ...

  5. Fastcgi、CGI 是什么及区别

    1.CGI是干嘛的?CGI是为了保证web server传递过来的数据是标准格式的,方便CGI程序的编写者. 2.web server(比如说nginx)只是内容的分发者. 比如,如果请求/index ...

  6. fastCGI了解与学习使用

    文章目录 前言 一.CGI CGI介绍 CGI工作流程 CGI的弊端 二.fastCGI 介绍 fastCGI与CGI的区别 fastCGI工作流程 三.fastCGI的使用 nginx下的请求 流程 ...

  7. Java 最常见的 10000+ 面试题及答案整理:持续更新

    Java面试题以及答案整理[最新版]Java高级面试题大全(2021版),发现网上很多Java面试题都没有答案,所以花了很长时间搜集,本套Java面试题大全,汇总了大量经典的Java程序员面试题以及答 ...

  8. nginx常见面试题

    1.nginx常用命令 启动nginx  ./sbin/nginx 停止nginx ./sbin/nginx -s stop    ./sbin/nginx -s quit 重载配置  ./sbin/ ...

  9. java面试题有哪些?

    肝了一个月的面试题终于来啦,大家开心不. 2022年最新Java面试题整理,全网最全一份,包含各个技术栈,Java基础,Java集合,多线程,Java异常,spring,spring MVC,spri ...

最新文章

  1. Pycharm Matplotlib 图像不显示问题
  2. 截取url的host_java正则表达式获取url的host示例
  3. Java异常分类及处理
  4. 操作系统课设——设计模拟一个SPOOLING假脱机输出程序
  5. 发现了拯救“文献多的一团麻”的工具
  6. 加载gif_搞笑gif:这啥情况啊?笑容加载不出来了?
  7. android系统源码的环境下用make来编译,Android源码编译系统入门
  8. OpenStack Keystone v3 API新特性
  9. 鼠标悬停在li标签上时显示一个弹框_HTML标签——列表标签
  10. 达芬奇调色软件:DaVinci Resolve Studio 16 Mac
  11. 【避免windows权限问题】nodejs 配置全局 globle 缓存 catch
  12. 如何恢复 TrustedInstaller 所有者权限;怎么给文件夹权限添加“所有受限制的应用程序包”这个用户主体:
  13. MATLAB实战——方差分析
  14. 推荐引擎:从搜索到发现
  15. ctfshow Nodejs
  16. ​LeetCode刷题实战450:删除二叉搜索树中的节点
  17. Python实现AES中ECB模式pkcs5padding填充加密/解密(需要加密文档中可以有中文)
  18. android五子棋源代码,Android五子棋游戏源码详解
  19. 如何安全使用公共Wifi,防止信息泄露?
  20. 【无标题】 中国红薯淀粉市场盈利动态与销售前景预测报告(2022-2027年)

热门文章

  1. Android Google Map APIKey申请
  2. mysql-----触发器
  3. mysql数学函数有什么_mysql数学函数有哪些?
  4. 周鸿祎:有的人在25岁时就死了,但在75岁时才被埋葬
  5. 已解决:手动打包war包结果无法在Tomcat中部署
  6. 使用GDAL获取网络数据
  7. iOS程序员必须知道的Android要点
  8. C#反射取得方法、属性、变量
  9. 雨松MOMO《Unity 3D游戏开发》源码公布
  10. 每天Leetcode 刷题 初级算法篇-有效的括号