我对spring MVC一无所知,但这个问题是基于旧的MVC框架的假设。为什么我在想是看到多个请求由单个实例处理,即控制器(默认情况下,spring bean是单例)。因此,在这种情况下,如果该网站的用户数量非常巨大,这就是性能问题。
答案 0 :(得分:3)
我不太明白你究竟要求的是什么。
默认情况下,spring beans是单例
是的,他们是。这非常有意义:一旦容器被引导,您就拥有了回答请求所需的所有实例。事实上,它们在整个生命周期中被实例化一次并且只有一个实例有助于降低创建新实例的影响。
想想加载下的系统:
如果他们不是单身人士,那么每次请求都会创建一个新的控制器实例。这需要(很少)时间,但需要时间。然后在请求得到解答后,不再需要实例。新请求将创建一个新实例。所以你在JVM中乱扔了大量的"一次性对象",这些对象必须在某个时间点进行垃圾收集。这会导致GC暂停。这是不受欢迎的行为。因此,为了提高吞吐量和响应时间,使用Singletons
(在 Spring-sense 中)是有意义的。
因此,在这种情况下,如果该网站的用户数量非常庞大,这就是性能问题。
不,恰恰相反:这 - 正如我所说 - 改善了表现。
当然,如果你担心Slashdot Effect,那么在前面使用带有多个冗余实例和负载均衡器的serverlayout会很聪明。但这是另一个主题的主题。
答案 1 :(得分:0)
使用一个实例或10000个实例这一事实对性能没有任何影响。
重要的是并行工作的线程数。这些线程是否都使用单个实例,或者每个都有自己的控制器实例,并不会改变任何内容。
答案 2 :(得分:0)
单个contrlloer实例处理多个请求是非线程安全的!开发人员必须为某些情况添加同步过程,这将是性能瓶颈!如果每个控制器实例请求,控制器是线程安全的,则大多数情况下不需要同步。至于创建许多控制器实例,这不会导致严重的性能问题,此外,现代计算机的内存非常大。
PS:正如我在评论中提供的那样:
这不是一个真或假的选择,每个控制器的请求和单个控制器是两种策略。很难说哪个好或坏。我刚才说线程安全是2策略的一个重要关注点。