为每个发送到 CGI 的请求启动一个新进程意味着什么?

What does it mean when a new process is started for every request sent to CGI?

我正在尝试了解 servlet 及其相对于 CGI 的优势。有人提到,在 CGI 中每次都会启动一个新进程,与 servlet 相比它很慢。有人可以解释一下这里的进程到底是什么,以及 servlet 比 CGI 有何优势?

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

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