Spring MVC 网络应用程序中控制器 Class 的对象数
Number of Objects of Controller Class in Spring MVC web-app
我有两个问题:
Q1。关于 "servlet object" 的生命周期?正如我们所知,请求和响应对象是根据访问创建的,但 Servlet 对象不是根据 access.Different 请求创建的,它们具有不同的线程,而不是实例,因此它可能消耗更少 resources.So 服务器如何同时提供请求?我知道当您从 DB 读取时这不会成为问题,但是当涉及到写入时它会产生问题?像亚马逊或任何在线预订服务这样的大公司如何处理这个[从 servlet 端]?
Q2。当我们制作一个 spring mvc web-app[使用默认配置] 时,创建了多少个控制器对象 class;我相信 ans 是 1,因为组件扫描只发生一次 !!...但它再次让我回到之前的问题 多个请求如何在不干扰的情况下使用单个对象工作??...
一个简单的例子可能会清楚我的问题:
假设如果我有这个控制器 class 比如:
class controller{
void add(a,b){ blah blah...}
void sub(a,b){ blah blah...}
void multiply(a,b){blah blah...}
};
现在如果有 3 个线程 t1、t2 和 t3 想要使用控制器的单个对象同时访问加法、减法和乘法!!..他们将如何同时进行??
同步是否意味着线程必须等待轮到它们。我的意思是说,直到拥有对象的线程完成了它,其他线程才会等待。所以他们不会同时工作而是等待。大公司如何管理这些同时发生的行动
servlet,就像 Spring MVC 控制器一样,都是单例。因此,一个唯一的实例用于同时处理多个请求。
这应该不是问题,因为 servlet 或 Spring MVC 控制器是无状态对象:它们接受输入并产生输出,而不修改任何内存中状态。如果他们这样做,则必须正确同步对此内存中状态的访问。
关于对数据库的访问,通常由数据库本身处理。关系数据库提供 ACID 保证,允许使用事务并发访问数据库。例如,如果您以相反的顺序写入两行,则可能会出现死锁,但数据库会检测到该死锁,并且其中一个线程会出现异常,并且其事务将被回滚,从而使数据库处于一致状态。
其他数据库使用更多的悲观锁,一次只允许一个线程访问它们的集合。
我有两个问题:
Q1。关于 "servlet object" 的生命周期?正如我们所知,请求和响应对象是根据访问创建的,但 Servlet 对象不是根据 access.Different 请求创建的,它们具有不同的线程,而不是实例,因此它可能消耗更少 resources.So 服务器如何同时提供请求?我知道当您从 DB 读取时这不会成为问题,但是当涉及到写入时它会产生问题?像亚马逊或任何在线预订服务这样的大公司如何处理这个[从 servlet 端]?
Q2。当我们制作一个 spring mvc web-app[使用默认配置] 时,创建了多少个控制器对象 class;我相信 ans 是 1,因为组件扫描只发生一次 !!...但它再次让我回到之前的问题 多个请求如何在不干扰的情况下使用单个对象工作??...
一个简单的例子可能会清楚我的问题: 假设如果我有这个控制器 class 比如:
class controller{
void add(a,b){ blah blah...}
void sub(a,b){ blah blah...}
void multiply(a,b){blah blah...}
};
现在如果有 3 个线程 t1、t2 和 t3 想要使用控制器的单个对象同时访问加法、减法和乘法!!..他们将如何同时进行??
同步是否意味着线程必须等待轮到它们。我的意思是说,直到拥有对象的线程完成了它,其他线程才会等待。所以他们不会同时工作而是等待。大公司如何管理这些同时发生的行动
servlet,就像 Spring MVC 控制器一样,都是单例。因此,一个唯一的实例用于同时处理多个请求。
这应该不是问题,因为 servlet 或 Spring MVC 控制器是无状态对象:它们接受输入并产生输出,而不修改任何内存中状态。如果他们这样做,则必须正确同步对此内存中状态的访问。
关于对数据库的访问,通常由数据库本身处理。关系数据库提供 ACID 保证,允许使用事务并发访问数据库。例如,如果您以相反的顺序写入两行,则可能会出现死锁,但数据库会检测到该死锁,并且其中一个线程会出现异常,并且其事务将被回滚,从而使数据库处于一致状态。
其他数据库使用更多的悲观锁,一次只允许一个线程访问它们的集合。