servlets - 为每个发送到 CGI 的请求启动一个新进程是什么意思?
问题描述
我试图了解 servlet 和它提供的优于 CGI 的优势。有人提到在 CGI 中每次都会启动一个新进程,并且与 servlet 相比它很慢。有人能解释一下这里的进程到底是什么,以及 servlet 对 CGI 有什么好处吗?
解决方案
CGI 可以被认为是一个普通的可执行文件——它是一个运行、做某事、然后结束的程序。就像 dos 或 shell 命令一样。问题是启动这样一个可执行文件有少量开销,操作系统分配内存,将程序加载到内存中,运行它,然后释放所有内容。如果您正在运行一个每秒有 100 多个请求的网站,则此开销可能会变得很大,如果许多并发 HTTP 请求到达服务器,则此 CGI 的许多副本可能最终会在内存中结束。
另一方面,Servlet 的资源只分配一次,用于内存中的一个实例。这个单一实例可以同时处理许多 HTTP 请求,单一实例在所有请求之间共享它分配的资源。这可能是一个问题 - 如果两个请求尝试访问,实例和静态变量可能会损坏。然而,效率和速度的优势远远超过了这一点。
推荐阅读
- docker - Sonarqube + Postgresql 容器无法确定数据库方言
- sql-server-2017 - 数据分析查看器中的数据类型参数不能为空
- here-api - ApplicationError:请求中指定的 LinkId 不可用
- python - 如何在 Gurobi python 界面中创建二进制变量?
- python - 我可以在 Python Markdown 中将标签列入白名单吗?
- php - Laravel PHPUnit 测试抛出禁止错误
- reactjs - 开发服务器返回响应错误码:500\React Native
- javascript - 使用 React 和 JQuery 从文件中绘制 SVG 的问题
- javascript - 我想获取具有相同字段名称的对象中的所有值并存储在数组中
- jenkins - Jenkins > Blue Ocean > 从最新提交构建