我是Java和Web开发的新手,因此我正在阅读tutorial,其中说servlet模式优于CGI的一个优点是:
更好的性能:因为它不为每个请求创建一个线程 过程
但是,我真的不明白为什么会这样。基于这个answer,至少对于Linux来说,普遍的共识似乎是线程不一定比进程更快并且实际上可能有利进程代替线程。
在教程中写道CGI的工作原理如下:
对于每个请求,它启动一个进程,Web服务器仅限于 启动流程。
考虑到流程的启动成本时,这可能有意义。但是,我不确定为什么有必要为每个请求启动一个新进程,而不是让一个正在运行的CGI shell池服务于排队的请求。
答案 0 :(得分:1)
,因为 在CGI中,每个请求都由重量级的OS进程处理,而在In Servlets中,每个请求都由轻量级Java Thread处理
答案 1 :(得分:1)
主要的性能差异是GCI为每个请求分配/执行一个新进程,但设计良好的Servlet容器在启动时创建(有界)线程池,将它们分配给请求,并且 recyles < / em>请求完成时。
创建线程( 重要)的成本在servlet容器的生命周期内摊销。
如果你可以维护一个&#34; CGI shell&#34;,我想这会更有效率。但是,CGI应用程序的正常假设是从一张干净的表开始。
还有其他一些问题: