Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java CGIs和servlet的执行方式如何不同?_Java_Servlets_Cgi_Executable - Fatal编程技术网

Java CGIs和servlet的执行方式如何不同?

Java CGIs和servlet的执行方式如何不同?,java,servlets,cgi,executable,Java,Servlets,Cgi,Executable,我的理解是CGI每次都会在服务器上生成一个单独的可执行进程,但Servlet不会这样做——但我不确定如何通过比较来描述Servlet会发生什么。由于servlet存在于JVM内部,而JVM是一个单独的进程,因此servlet与之相关的存在于何处?servlet容器(JVM进程)通常以不同的方式处理每个请求 如果已完成请求服务的线程保持活动状态以便将来再次使用,则使用的最大线程数通常都是可配置的属性。servlet容器(JVM进程)通常以不同的方式处理每个请求 如果已完成请求服务的线程保持活动状态

我的理解是CGI每次都会在服务器上生成一个单独的可执行进程,但Servlet不会这样做——但我不确定如何通过比较来描述Servlet会发生什么。由于servlet存在于JVM内部,而JVM是一个单独的进程,因此servlet与之相关的存在于何处?

servlet容器(JVM进程)通常以不同的方式处理每个请求

如果已完成请求服务的线程保持活动状态以便将来再次使用,则使用的最大线程数通常都是可配置的属性。

servlet容器(JVM进程)通常以不同的方式处理每个请求


如果已完成请求服务的线程保持活动状态以便将来重新使用,则使用的最大线程数通常都是可配置的属性。

Servlet代码在线程中执行。该线程由Servlet容器生成,Servlet容器是在JVM中运行的Java应用程序

收到请求后,Servlet容器启动一个线程,该线程执行Servlet代码,并向该代码提供要处理的传入请求。完成处理后,该线程进入池,或者根据容器的开发方式终止

好处是:对于操作系统来说,生成新进程比在现有进程中生成线程成本更高(内存、IO和CPU周期)。线程还与父进程共享内存空间

线程可以被池化。尽管创建线程的成本较低;当然要支付性能成本;然而,拥有一个线程池在某种程度上解决了这一问题


拥有线程的另一个好处是可以优雅地完成错误处理。如果线程通过抛出错误返回,那么处理它要比处理以错误终止的进程容易得多。

Servlet代码在线程中执行。该线程由Servlet容器生成,Servlet容器是在JVM中运行的Java应用程序

收到请求后,Servlet容器启动一个线程,该线程执行Servlet代码,并向该代码提供要处理的传入请求。完成处理后,该线程进入池,或者根据容器的开发方式终止

好处是:对于操作系统来说,生成新进程比在现有进程中生成线程成本更高(内存、IO和CPU周期)。线程还与父进程共享内存空间

线程可以被池化。尽管创建线程的成本较低;当然要支付性能成本;然而,拥有一个线程池在某种程度上解决了这一问题


拥有线程的另一个好处是可以优雅地完成错误处理。如果线程通过抛出错误返回,那么处理它要比处理以错误终止的进程容易得多。

在运行时,CGI进程由web服务器作为单独的操作系统外壳启动。shell包括一个操作系统环境和执行CGI代码的进程,CGI代码驻留在服务器的文件系统中。每个新的http请求都会在服务器上启动一个新的OS外壳。CGI程序的响应时间很高,因为CGI程序在其自己的操作系统外壳中执行,因此创建操作系统外壳对于操作系统来说是一项繁重的活动

对于servlet,它在web容器中作为线程运行,而不是在单独的OS进程中运行。web容器本身是一个操作系统进程,但它作为一个服务运行,并且是连续可用的。当对servlet的请求数量增加时,不会创建servlet的其他实例。每个请求都使用一个Java线程并发处理


请注意,servlet作为web容器进程内的线程执行。

在运行时,CGI进程由web服务器作为单独的操作系统外壳启动。shell包括一个操作系统环境和执行CGI代码的进程,CGI代码驻留在服务器的文件系统中。每个新的http请求都会在服务器上启动一个新的OS外壳。CGI程序的响应时间很高,因为CGI程序在其自己的操作系统外壳中执行,因此创建操作系统外壳对于操作系统来说是一项繁重的活动

对于servlet,它在web容器中作为线程运行,而不是在单独的OS进程中运行。web容器本身是一个操作系统进程,但它作为一个服务运行,并且是连续可用的。当对servlet的请求数量增加时,不会创建servlet的其他实例。每个请求都使用一个Java线程并发处理


请注意,servlet在web容器的进程中作为线程执行。

因此servlet生成单独的线程,CGI生成单独的进程。这样说公平吗?所以Servlet生成一个单独的线程,CGI生成一个单独的进程。这样说公平吗?