首页 > 解决方案 > 为每个发送到 CGI 的请求启动一个新进程是什么意思?

问题描述

我试图了解 servlet 和它提供的优于 CGI 的优势。有人提到在 CGI 中每次都会启动一个新进程,并且与 servlet 相比它很慢。有人能解释一下这里的进程到底是什么,以及 servlet 对 CGI 有什么好处吗?

标签: servletsjakarta-eeprocesscgi

解决方案


CGI 可以被认为是一个普通的可执行文件——它是一个运行、做某事、然后结束的程序。就像 dos 或 shell 命令一样。问题是启动这样一个可执行文件有少量开销,操作系统分配内存,将程序加载到内存中,运行它,然后释放所有内容。如果您正在运行一个每秒有 100 多个请求的网站,则此开销可能会变得很大,如果许多并发 HTTP 请求到达服务器,则此 CGI 的许多副本可能最终会在内存中结束。

另一方面,Servlet 的资源只分配一次,用于内存中的一个实例。这个单一实例可以同时处理许多 HTTP 请求,单一实例在所有请求之间共享它分配的资源。这可能是一个问题 - 如果两个请求尝试访问,实例和静态变量可能会损坏。然而,效率和速度的优势远远超过了这一点。


推荐阅读