#Rokcet_post
Салют!
История такова: к нам обратились с задачей реализовать рассылку клиентам через SMTP-сервер.
Я не буду вам рассказывать о всей реализации, но суть была такая: есть удаленный сервер с SMB-shared folder, есть база юзеров. Нужно сделать рассылку файлов всем пользователям во время Ч.
В начале я не сильно задумывался над тем как это сделать, поэтому просто посмотрел либы для работы с смб и взял одну из них. После того, как некий MVP продукт был готов, я немного разочаровался временем, затрачиваемым на отправку одного письма в 3 секунды. Боттелнеком здесь явно была смб сессия(позднее я вычитал в документации либы, что из коробки мультисессия не поддерживается). И вот тут мы подходим к основной теме статьи - это паттерн Object Pool. Object Pool - это паттерн проектирования, который предназначен для управления набором повторно используемых объектов.
Основные аспекты паттерна:
- Экономия ресурсов: создание и уничтожение объектов (в частности, сетевые соединения) может быть дорогостоящим по времени и ресурсам.
- Повышение производительности: повторное использование объектов сокращает накладные расходы( обеспечиваем конкурентное выполнение).
- Контроль за количеством активных объектов: пул ограничивает максимальное число одновременно используемых ресурсов, что предотвращает их истощение.
Принцип:
- При инициализации создается фиксированное или минимальное количество объектов.
- Когда клиенту нужно подключение (или другой объект), пул выдает свободный объект.
- Клиент использует объект.
- После использования объект возвращается обратно в пул.
- Если все объекты заняты, клиент может ждать освобождения или получить ошибку.
В моем случае я создавал пул SMB сессий и использовать их, чтобы достать файлик из общей папки, вот таким нехитрым путем я убежал от страшных 3 секунд и пришел к желаемому конкурентному и досточно быстрому решению задачи.😎


