【问题标题】:In what situation can CGI be faster than Servlet?什么情况下CGI可以比Servlet快?
【发布时间】:2011-04-20 00:07:22
【问题描述】:

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

【问题讨论】:

  • 你真的很喜欢辩论。你的老师可能本质上是对的。尽管如此,我应该赞扬你对“总是”这个词的谨慎。
  • 如果您将“CGI”表示“运行 [Perl|Python|whatever] 脚本”,那么他是对的:servlet 通常会在解释器启动之前完成。如果你把它理解为“运行二进制文件”,那么你肯定可以找到像下面查理马丁这样的例子,其中一个预编译的 C 代码将加载和运行得非常快,很可能比 servlet 更快。但是到那时你已经开始发疯了。不过,你的老师应该知道不要使用“总是”这个词;)
  • 本主题可能有助于更好地理解 CGI:I never really understood: what is CGI?

标签: performance servlets cgi


【解决方案1】:

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

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

基本上,CGI 性能会根据您实现它的语言而有所不同,我怀疑 servlet 是否会比 C++ CGI 执行相同的操作更快。当资源消耗发挥重要作用时,压力更大。

问你的老师为什么 Facebook 将 PHP 编译成 C++ 等价物,或者为什么 Google 和 Amazon 在他们的实现中使用 C++。

人们谈论 fork() exec() 开销,但不承认 JVM 在内部做同样的事情。顺便说一句,JVM 是用 C/C++ 编写的。

【讨论】:

    【解决方案2】:

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

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

     main(){ return; }
    

    您将其与 servlet 进行比较,它可能会更快。

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

    【讨论】:

    • 我怀疑即使这样会更快。你需要 fork() 和 exec()。将此与在很可能已经产生的线程上处理请求进行比较。也许 FastCGI 在某些情况下会胜出,但不是普通的 CGI。
    • 这真的取决于设置。正如您所说, fork/exec 可能会有所作为,但是您也可能正在运行 fastCGI,因此消除了 fork./exec 时间。换个方向,如果 JVM 必须交换任何重要的东西来处理请求,那可能比 fork/exec 需要更多的时间。关键是性能不是主观的。如果您想知道哪个更快,请测量
    猜你喜欢
    • 1970-01-01
    • 2012-06-02
    • 2014-09-13
    • 2013-05-02
    • 2017-11-30
    • 2012-10-21
    • 2022-01-10
    • 1970-01-01
    • 2020-03-11
    相关资源
    最近更新 更多