博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
fastcgi与cgi的区别
阅读量:5032 次
发布时间:2019-06-12

本文共 954 字,大约阅读时间需要 3 分钟。

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/wwl188/p/5983063.html

你可能感兴趣的文章
博客主Judge已跳槽搬家emmm
查看>>
2017.7.31 ELK+logback+redis的使用
查看>>
Win10系统怎样让打开图片方式为照片查看器
查看>>
Chrome 开发者工具的技巧
查看>>
codevs 1069 关押罪犯 并查集
查看>>
Mybatis用log4j输出日志,输出sql到控制台
查看>>
中国象棋
查看>>
enum
查看>>
ffmpeg在am335x上的移植 分类: ffmpeg-SDL-VL...
查看>>
Cisco AP-ROMMON升级AP镜像
查看>>
十天冲刺3
查看>>
80. Remove Duplicates from Sorted Array II
查看>>
数据库-mongodb-高级查询表达式
查看>>
struts2 ajax 实现方式
查看>>
文件上传控件
查看>>
LoadRunner HTTP脚本迭代处理的常见问题
查看>>
fiddler安装及抓取http和https请求
查看>>
sessionManager配置
查看>>
PAT乙级.1001.害死人不偿命的(3n+1)猜想
查看>>
【leetcode】Reorder List (middle)
查看>>