作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 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 应用程序的正常假设是从一张干净的纸开始。
还有一些其他问题:
关于java - Servlet 架构是否比 CGI 更快,因为它使用线程而不是进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43257880/
我是一名优秀的程序员,十分优秀!