-1

有人可以解释一下golang关于CGI的文档的摘录:

" 请注意,使用 CGI 意味着启动一个新进程来处理每个请求,这通常比使用长时间运行的服务器效率低。这个包主要是为了与现有系统兼容。"

我使用 CGI 来制作数据库的放置和获取。

这是低效的吗?我应该使用“长期运行的服务器”吗?

如果是这样,那是什么意思,我该如何实施?

... http://golang.org/pkg/net/http/cgi/

4

2 回答 2

2

是的,它是低效的。启动一个全新进程的成本通常远不止连接到一个已经存在的进程,或者在当前进程中的线程上做某事。

至于有没有必要,那就看情况了。如果您正在创建一个与 Google 竞争的搜索引擎,我建议 CGI不是要走的路。

如果它是一个每小时访问一次的个人网站,我想你可能会侥幸逃脱。

就长时间运行的服务器而言,您通常可以为一直在运行的 Web 服务器编写插件之类的东西,并且 Web 服务器只是在需要时将请求传递给它(可能还有多个“它”线程) .

这样,它就一直准备就绪,您不必等待 Web 服务器启动另一个进程来处理请求。

事实上,Apache 本身通过一个模块(如插件)执行 CGI,该模块在运行时将自身集成到 Apache 中 - 外部进程的实际调用是该模块处理的。源代码,如果您认为有帮助,可以在mod_cgi.c网络搜索中找到。

另一个示例是mod_perlPerl 解释器模块,可在此链接中找到。

于 2012-09-03T05:36:09.657 回答
0

要研究的一个选项是 fastcgi,它是一个长时间运行的服务器程序,不会不断地重新启动每个请求。过去,由于 C、C++、FPC 等语言中的内存泄漏,快速 cgi 有其缺点,因为它们没有被垃圾收集。一个 fastcgi 程序在对网站进行数百万次点击后发生小的内存泄漏可能会导致服务器停机,而普通的旧 CGI 本身就是一个垃圾收集器:程序重新启动,因此每次有人请求页面并且 cgi 退出时都会进行清理。在 Go lang 内存泄漏的情况下,不是问题,但是快速 cgi 可能有一些隐藏的问题,例如:如果 golang 在其垃圾收集器本身中有任何内存泄漏......(不太可能,但可能会弹出这样的问题 - 也堆碎片......随着时间的推移......)

一般来说fastcgi和“长时间运行”是过早的优化。我见过每天有 5 个访问者访问他们的个人主页网站的人大喊“嘿,也许我应该使用 fastcgi”,而实际上他们每天需要 500 万访问者 - 但他们喜欢时髦和酷,所以他们开始考虑在他们的网站甚至被 3 个人知道之前的快速 cgi。

您需要问自己:您使用的服务器是否有大量流量,大量流量并不是指每天有 100 位访客……即使每天 1000 位独立访客也不算多。

目前尚不清楚您是要为 apache 服务器编写 Go lang cgi 程序,还是要为 go 服务器编写 python 程序,或者您是否正在编写具有 cgi 功能的 go 服务器,用于 python 和 perl。澄清你实际上在做什么。

至于有人在另一个答案中发布的与谷歌竞争的搜索引擎:如果你看看谷歌的历史,他们实际上是通过一些 cgi 系统用 C++/C 编写他们的程序......而不是使用 PHP、perl 或其他臀部和孩子们使用的很酷的东西。在很久以前查找 backrub 项目及其模板系统。它被称为 Ctemplate(C 编译程序调用 html 模板......)

https://www.google.com/search?safe=off&q=google+backrub+template+ctemplate

Fastcgi 可能是谷歌在 fastcgi 出现之前就想出来的东西,或者他们有自己的类似于 fastcgi 的专有解决方案,我不知道,因为我没有在谷歌工作 - 但因为他们使用 C++/C 程序为谷歌提供动力在过去(对于某些东西来说,今天可能仍然存在)他们一定一直在使用一些 cgi 技术,即使它是为了速度而修改的 cgi 技术。

于 2015-09-27T08:36:13.747 回答