Performance 在什么情况下CGI可以比Servlet更快?

Performance 在什么情况下CGI可以比Servlet更快?,performance,servlets,cgi,Performance,Servlets,Cgi,今天我和一位老师发生了一场争论,他说CGI总是比Servlet慢。我告诉他性能是主观的,在某些情况下CGI可以比Servlet表现得更好。他坚持要举例说明CGI何时可以比Servlet更快。我只是想知道我能想出什么最可靠的方法来对付“Servlet总是比CGI快”性能不是主观的。去查这个词 现在,为了回答您的问题,当执行servlet的Java代码的时间足够长,以至于加载和执行CGI程序的时间由Java程序运行的时间决定时,CGI将比servlet快。例如,如果你有一个C语言的CGI程序 ma

今天我和一位老师发生了一场争论,他说CGI总是比Servlet慢。我告诉他性能是主观的,在某些情况下CGI可以比Servlet表现得更好。他坚持要举例说明CGI何时可以比Servlet更快。我只是想知道我能想出什么最可靠的方法来对付“Servlet总是比CGI快”

性能不是主观的。去查这个词

现在,为了回答您的问题,当执行servlet的Java代码的时间足够长,以至于加载和执行CGI程序的时间由Java程序运行的时间决定时,CGI将比servlet快。例如,如果你有一个C语言的CGI程序

 main(){ return; }
与servlet相比,它可能更快


您要做的是设置一个servlet容器和一个CGI目录,并实际监视和测量一些比较性能。

6年后。。。。也许你可以给你的老师发电子邮件:

“平均而言,PHP版本比ASP版本快,而CGI(C++)版本比PHP和ASP都快10倍多。”()

基本上,CGI性能会根据您实现的语言而变化,我怀疑servlet将比C++ CGI运行更快。当资源消耗扮演重要角色时,压力更大

请询问你的老师为什么脸谱网将PHP编译成一个C++等价物,或者为什么谷歌和亚马逊在它们的实现上使用C++。p>
人们谈论fork()exec()开销,但不承认JVM在内部做同样的事情。顺便说一下,JVM是用C/C++编写的

你真的喜欢辩论。你的老师可能在本质上是对的。尽管如此,我还是要感谢您对“始终”这个词的谨慎。如果您将“CGI”理解为“运行[Perl | Python | whatever]脚本”,那么他是对的:servlet通常会在解释器启动之前完成。如果你把它理解为“运行一个二进制文件”,那么你肯定可以找到像查理·马丁(Charlie Martin)下面的例子,其中一段预编译的C将加载并运行得非常快,很可能比servlet更快。但你在这一点上是在吹毛求疵。不过,你的老师应该知道不要使用“永远”这个词本主题可能有助于更好地理解CGI:我怀疑即使这样也会更快。您需要fork()和exec()。将此与在最有可能已经生成的线程上处理请求进行比较。也许FastCGI在某些情况下可以获胜,但不是普通的老CGI。这取决于设置。正如您所说,fork/exec可能会起作用,但是您也可能正在运行fastCGI,这样就消除了fork/exec时间。反过来说,如果JVM必须交换任何重要的东西来处理请求,那么这可能比fork/exec要花更多的时间。关键是,表现不是主观的。如果你想知道哪个更快,测量一下。