如果多个用户同时使用它,使用单例模式是否会使我的应用程序变慢
Does using singleton pattern will make my application slower if multiple users are working on it simultaneously
我在理解 Singleton 上的使用时遇到了问题。我知道在使用单例模式时,一旦 class 的一个实例被创建并在所有用户之间共享。然而,这不会让多个用户(比如几千个用户)同时使用该资源的应用程序变慢吗?
例如。如果我的一项服务 class "Sendmail" 是单例,那么在 IOC 容器中只会创建该 class 的一个实例。现在这个实例将与使用该资源的所有当前用户共享。现在,如果多个用户同时尝试发送电子邮件,所有请求都将在队列中等待,因为只创建了一个 Sendmail 实例,这不会让用户等待发送他们的电子邮件吗?这对用户来说将是非常糟糕的体验。数据库连接也是如此。那为什么推荐使用Singleton而不是prototype呢?
请帮我解决我的困惑。
提前致谢。
不,单例模式不会降低应用程序的速度。它基本上创建单个对象并在每次请求时使其可用。
但是当您让多个用户同时访问 data/resource 时,这就是并发概念。如果您实施一些并发控制技术,那么 data/resource 的处理速度可能会减慢。
注意:代码 he/she 写的有多糟糕完全取决于开发人员。
我不是专家,但如果我错了,有人会纠正。
首先,Sigleton 是应用程序的一个实例。如果您两次启动您的应用程序,即使他们正在通信,他们也会分开工作。
其次,Sigleton 是发展的典范。它不会真正影响编译时应用程序的性能。
最后同时几千个请求对于连接这样简单的东西来说不是很重,它会在通信上比在处理上更阻塞。
注:连接数据库是sigleton的典型例子。他们不是愚蠢的问题,但你可以猜到每个人都在使用它,这可能是一种优化的方式。
单例 类 不会减慢您的处理速度,它只是意味着只创建一个对象实例并在 threads/classes.
中可用
如果您说的是让线程等待发送电子邮件导致进程变慢,那只是因为并发控制。如果您的用例与订购没有任何关系或者可以同时发送电子邮件,那么单例不会产生问题。话虽如此,您使用的连接器(第 3 方 API)可能会减慢您的进程,因为它们通常是为了进行并发控制而编写的。
但在您的情况下,javax 邮件不会造成发送电子邮件的问题。可以盲目使用单例来包裹发送邮件功能
我在理解 Singleton 上的使用时遇到了问题。我知道在使用单例模式时,一旦 class 的一个实例被创建并在所有用户之间共享。然而,这不会让多个用户(比如几千个用户)同时使用该资源的应用程序变慢吗?
例如。如果我的一项服务 class "Sendmail" 是单例,那么在 IOC 容器中只会创建该 class 的一个实例。现在这个实例将与使用该资源的所有当前用户共享。现在,如果多个用户同时尝试发送电子邮件,所有请求都将在队列中等待,因为只创建了一个 Sendmail 实例,这不会让用户等待发送他们的电子邮件吗?这对用户来说将是非常糟糕的体验。数据库连接也是如此。那为什么推荐使用Singleton而不是prototype呢?
请帮我解决我的困惑。 提前致谢。
不,单例模式不会降低应用程序的速度。它基本上创建单个对象并在每次请求时使其可用。
但是当您让多个用户同时访问 data/resource 时,这就是并发概念。如果您实施一些并发控制技术,那么 data/resource 的处理速度可能会减慢。
注意:代码 he/she 写的有多糟糕完全取决于开发人员。
我不是专家,但如果我错了,有人会纠正。 首先,Sigleton 是应用程序的一个实例。如果您两次启动您的应用程序,即使他们正在通信,他们也会分开工作。 其次,Sigleton 是发展的典范。它不会真正影响编译时应用程序的性能。 最后同时几千个请求对于连接这样简单的东西来说不是很重,它会在通信上比在处理上更阻塞。
注:连接数据库是sigleton的典型例子。他们不是愚蠢的问题,但你可以猜到每个人都在使用它,这可能是一种优化的方式。
单例 类 不会减慢您的处理速度,它只是意味着只创建一个对象实例并在 threads/classes.
中可用如果您说的是让线程等待发送电子邮件导致进程变慢,那只是因为并发控制。如果您的用例与订购没有任何关系或者可以同时发送电子邮件,那么单例不会产生问题。话虽如此,您使用的连接器(第 3 方 API)可能会减慢您的进程,因为它们通常是为了进行并发控制而编写的。
但在您的情况下,javax 邮件不会造成发送电子邮件的问题。可以盲目使用单例来包裹发送邮件功能