2010-10-01 65 views
1

我今天和我的一位老师有一个争论,他说CGI是总是比Servlet慢。我告诉他,性能是主观的,在某些情况下,CGI可能比Servlet表现更好。他坚持要得到CGI何时比Servlet更快的例子。我只想知道什么是我能想到的最坚实的东西来对付“Servlet是总是快于CGI”。在什么情况下CGI比Servlet更快?

+0

你真的很喜欢辩论。你的老师可能是正确的。尽管如此,我应该因为对“永远”这个词保持谨慎而给你信心。 – gawi 2010-10-01 18:21:21

+0

如果您将“CGI”表示为“运行[Perl | Python | whatever]脚本”,那么他是正确的:servlet通常会在解释器启动之前完成。如果你认为它的意思是“运行一个二进制文件”,那么你肯定会发现像下面的Charlie Martin这样的例子,预编译的一段C将会很快加载和运行,这可能比servlet快得多。但是,你正在分裂头发。尽管如此,你的老师应该比使用“永远”这个词更好;) – 2010-10-01 20:23:07

+0

这个主题可能有助于更好地理解CGI:[我从来没有真正理解:什么是CGI?](http://stackoverflow.com/questions/2089271/i-never-really-understand-what-is-cgi) – BalusC 2010-10-02 03:38:09

回答

0

表现不是主观的。去查找这个词。

现在,为了回答你的问题,当执行Servlet的Java代码所需的时间足够长以至于加载和执行CGI程序的时间由Java的时间所支配时,CGI将比Servlet快程序运行。因此,举例来说,如果你有一个在C CGI程序,有

main(){ return; } 

和你相比,与一个servlet,它很可能会更快。

你想要做的是建立一个servlet容器和一个CGI目录,并实际监控和衡量一些比较性能。

+0

我怀疑即使这样会更快。你需要fork()和exec()。将其与在最可能已经产生的线程上处理请求进行比较。也许FastCGI可以在某些情况下获胜,但不是普通的CGI。 – gawi 2010-10-01 18:23:42

+0

这真的取决于设置。正如你所说,fork/exec可能会有所作为,但是你也可能正在运行fastCGI,所以fork./exec时间被消除了。换个角度来说,如果JVM必须交换任何重要的东西来处理请求,那可能比fork/exec要多得多。重点是**表现不是主观**。如果你想知道哪个更快,* measure *。 – 2010-10-04 16:05:12

2

6年后....也许你可以通过电子邮件发送你的老师这样的:

“平均来说,PHP版本比ASP版快,而CGI(C++)的版本快10倍以上比PHP和ASP都好。“ (http://www.wrensoft.com/zoom/benchmarks.html

基本上,CGI的性能会根据您实现的语言而有所不同,我怀疑一个servlet运行速度会比C++ CGI做同样的事情还要快。资源消耗在发挥重要作用时,更会受到压力。

问你的老师为什么Facebook将PHP编译成C++版本,或者谷歌和亚马逊为什么在他们的实现中使用C++。人们谈论fork()exec()开销,但不承认JVM在内部执行相同的操作。顺便说一句,JVM是用C/C++编写的。

相关问题