Будет ли использование шаблона синглтона замедлять работу моего приложения, если над ним одновременно работают несколько пользователей? - PullRequest
0 голосов
/ 26 марта 2019

У меня проблемы с пониманием использования на Синглтоне.Я понимаю, что при использовании одноэлементного шаблона, один экземпляр класса создается и используется всеми пользователями.Однако не приведет ли это к замедлению работы приложения для пользователей, которые используют несколько ресурсов (скажем, несколько тысяч пользователей) в данный момент?

Например,Если один из моих классов обслуживания «Sendmail» является одноэлементным, то в контейнере IOC будет создан только один экземпляр этого класса.Теперь этот экземпляр будет доступен всем текущим пользователям, использующим этот ресурс.Теперь, если несколько пользователей пытаются отправить электронную почту в одно мгновение, все запросы будут ждать в очереди, поскольку создается только один экземпляр Sendmail, не заставит ли это пользователей ждать отправки своего электронного письма?Это будет очень плохой опыт для пользователей.То же самое касается подключения к базе данных.Тогда почему рекомендуется использовать Singleton вместо прототипа?

Пожалуйста, помогите мне устранить мою путаницу.Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 26 марта 2019

Нет, шаблон Singleton не замедляет работу приложения. Он в основном создает отдельный объект и делает его доступным каждый раз, когда запрашивается.

Но если вы используете одновременный доступ к данным / ресурсу для нескольких пользователей, это концепция параллелизма. если вы реализуете некоторые методы управления параллелизмом, тогда обработка данных / ресурсов может замедлиться.

Примечание: все зависит от разработчика, от того, какой ужасный код он пишет.

0 голосов
/ 26 марта 2019

Классы Singleton не замедляют вашу обработку, это просто означает, что только один экземпляр объекта создан и доступен для потоков / классов.

Если вы говорите о замедлении процесса из-за того, что потоки ожидают отправки электронного письма, это просто из-за управления параллелизмом. Если ваш вариант использования не имеет ничего общего с заказом или может одновременно отправить электронное письмо, то синглтон не создаст проблему. При этом используемый вами коннектор (сторонний API) может замедлить ваш процесс, поскольку он обычно написан для обеспечения контроля параллелизма.

Но в вашем случае javax mail не создаст проблему для отправки электронного письма. Вы можете вслепую использовать синглтон, чтобы обернуть функцию отправки электронной почты.

0 голосов
/ 26 марта 2019

Я не эксперт, но кто-то поправит, если я ошибаюсь.Во-первых, Sigleton - это один экземпляр приложения.Если вы запускаете приложение дважды, они работают раздельно, даже если они общаются.Во-вторых, Сиглтон - это образец развития.Это на самом деле не влияет на производительность вашего приложения во время компиляции.И, наконец, несколько тысяч запросов в то же время не очень тяжелы для чего-то простого, например, для соединения, оно будет больше блокировать при обмене данными, чем при обработке.

Примечание: подключение к базе данных является типичным примеромsigleton.Это не глупый вопрос, но вы можете догадаться, что если все его используют, это может быть оптимизированный способ.

...