gpt4 book ai didi

java - Servlet 架构是否比 CGI 更快,因为它使用线程而不是进程?

转载 作者:行者123 更新时间:2023-12-02 02:54:56 25 4
gpt4 key购买 nike

我是 Java 和 Web 开发的新手,所以我正在阅读这篇文章 tutorial其中指出 Servlet 模式相对于 CGI 的优势之一是:

better performance: because it creates a thread for each request not process.

但是,我真的不明白为什么会这样。基于此answer ,至少对于 Linux 来说,普遍的共识似乎是线程不一定比进程更快,而且使用进程代替线程实际上可能有利

在教程中,CGI 的工作原理如下:

For each request, it starts a process and Web server is limited to start processes.

当考虑到流程的启动成本时,这可能是有道理的。但是,我不确定为什么有必要为每个请求启动一个新进程,而不是让一个正在运行的 CGI shell 池来服务排队的请求。

最佳答案

主要的性能差异是 GCI 为每个请求 fork /执行一个新进程,但是设计良好的 Servlet 容器在启动时创建一个(有界)线程池,将它们分配给请求,然后回收 请求完成时出现。

创建线程的成本(非常重要)在 servlet 容器的生命周期内摊销。

如果您可以维护一个“CGI shell”池,我想这会更有效率。然而,CGI 应用程序的正常假设是从一张干净的纸开始。

还有一些其他问题:

  • 在 servlet 容器中,您还可以维护共享 session 和请求缓存、共享数据库连接池等。
  • 由于 JVM 启动/预热的开销,每个请求使用 JVM 实现的 CGI 的性能会很糟糕。典型的请求可能不会运行足够长的时间来进行 JIT 编译字节码。

关于java - Servlet 架构是否比 CGI 更快,因为它使用线程而不是进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43257880/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com