首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >servlet架构是否比CGI更快,因为它使用线程而不是进程?

问servlet架构是否比CGI更快,因为它使用线程而不是进程?
EN

Stack Overflow用户
提问于 2017-04-06 14:18:45
回答 2查看 180关注 0票数 0

我对Java和web开发都很陌生,所以我正在阅读这个教程,它说servlet模式相对于CGI的一个优点是:

更好的性能:因为它为每个请求创建一个线程,而不是进程。

不过,我实在不明白为何要这样做。基于这个回答,至少对于Linux来说,普遍的共识似乎是,线程不一定比进程更快,使用进程而不是线程可能实际上是有利的。

在本教程中,CGI的工作方式如下:

对于每个请求,它启动一个进程,Web服务器仅限于启动进程。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-06 14:38:03

主要的性能差异是GCI为每个请求分叉/执行一个新的进程,但是一个设计良好的Servlet容器在启动时创建一个(有界的)线程池,将它们分配给请求,并在请求完成时对它们进行样式化。

创建线程的成本(这是很重要的)将在servlet容器的生存期内摊销。

如果您能够维护一个"CGI shell“池,我想这会更有效。然而,CGI应用程序的正常假设是从干净的工作表开始。

还有其他几个问题:

  • 在servlet容器中,还可以维护共享会话和请求缓存、数据库连接的共享池等。
  • 使用每个请求的JVM实现的CGI的性能会很糟糕.因为JVM启动/热身的开销。一个典型的请求可能不会运行足够长的字节码来编译JIT。
票数 1
EN

Stack Overflow用户

发布于 2017-04-06 14:29:41

因为在CGI中,每个请求都由重量级OS进程处理,而在Servlets中,每个请求都由轻量级Java处理

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43257880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档