JBoss 4.2.3 如何实现 SingleThreadModel (STM):1 个 servlet 实例或多个 servlet 实例?
How JBoss 4.2.3 implements SingleThreadModel (STM): 1 instance of a servlet OR multiple instances of a servlet?
我正在开发部署到 JBoss 4.2.3 的企业应用程序。它使用 Servlet 2.5 规范。
该应用程序有一些 JSP 使用带有此指令的 SingleThreadModel (STM):<%@ page isThreadSafe="false" %>
我想知道JBoss4.2.3是如何实现SingleThreadModel(STM)的:
- 它是否只有 1 个 servlet 实例并序列化所有请求
在上面吗?
- 或者它有一个servlet的多个实例并处理每个请求
同时?
我如何找到这些信息?
谢谢
根据 JBOSS Documents,这可以在两种模型中完成:
The servlet container can make this guarantee by synchronizing access to a single instance of the servlet, or by maintaining a pool of servlet instances and dispatching each new request to a free servlet
注意这不是完全线程安全的:
Note that SingleThreadModel does not solve all thread safety issues
和:
session attributes and static variables can still be accessed by
multiple requests on multiple threads at the same time
所以我认为答案是这个指令(以及扩展 SingleThreadModel servlets)将阻止多个线程调用 单个实例 的 service
方法] 您的 servlet 的同时 不会 阻止 Web 服务器使用 servlet 的多个实例同时处理请求。
换句话说,单个实例不会同时服务于多个线程中的请求,但是网络服务器可以创建多个servlet实例并将每个请求同时分配给一个实例。
更新
我在catalina core中发现了一个20 maxInstances的常量,它将实例化最多20个servlet实例来服务同时接收到一个servlet的请求,如果没有空闲实例,则等待有空闲servlet 实例。
我正在开发部署到 JBoss 4.2.3 的企业应用程序。它使用 Servlet 2.5 规范。
该应用程序有一些 JSP 使用带有此指令的 SingleThreadModel (STM):<%@ page isThreadSafe="false" %>
我想知道JBoss4.2.3是如何实现SingleThreadModel(STM)的:
- 它是否只有 1 个 servlet 实例并序列化所有请求 在上面吗?
- 或者它有一个servlet的多个实例并处理每个请求 同时?
我如何找到这些信息?
谢谢
根据 JBOSS Documents,这可以在两种模型中完成:
The servlet container can make this guarantee by synchronizing access to a single instance of the servlet, or by maintaining a pool of servlet instances and dispatching each new request to a free servlet
注意这不是完全线程安全的:
Note that SingleThreadModel does not solve all thread safety issues
和:
session attributes and static variables can still be accessed by multiple requests on multiple threads at the same time
所以我认为答案是这个指令(以及扩展 SingleThreadModel servlets)将阻止多个线程调用 单个实例 的 service
方法] 您的 servlet 的同时 不会 阻止 Web 服务器使用 servlet 的多个实例同时处理请求。
换句话说,单个实例不会同时服务于多个线程中的请求,但是网络服务器可以创建多个servlet实例并将每个请求同时分配给一个实例。
更新
我在catalina core中发现了一个20 maxInstances的常量,它将实例化最多20个servlet实例来服务同时接收到一个servlet的请求,如果没有空闲实例,则等待有空闲servlet 实例。