Пул объектов (Object Pool) — различия между версиями

Материал из Вики ИТ мехмата ЮФУ
Перейти к: навигация, поиск
(Участники)
(Диаграмма классов)
Строка 19: Строка 19:
 
=== Реализация ===
 
=== Реализация ===
 
==== Диаграмма классов ====
 
==== Диаграмма классов ====
[[Изображение:Common.png]]
+
[[Изображение:ObjectPoolCommon.png]]
  
 
==== Участники====
 
==== Участники====

Версия 07:37, 7 октября 2014

К основной странице курса

Назначение

Обеспечивает интерфейс для работы с набором инициализированных и готовых к использованию объектов.

Описание

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

Особенно заметно повышение производительности когда объекты часто создаются-уничтожаются, но одновременно существует их небольшое число.

Использование

Паттерн Пул объектов используется когда:

  • Программа может создать только ограниченное число экземпляров некоторого класса
  • Экземпляры класса являются взаимозаменяемыми. Если есть сразу несколько экземпляров, то можно выбрать любой.
  • Объект требует значительных ресурсов на свое создание
  • Объекты постоянно создаются-уничтожаются и в каждый момент времени используется небольшое их число

Реализация

Диаграмма классов

ObjectPoolCommon.png

Участники

  • Reusable - повторно используемый объект
  • ReusablePool - пул повторно используемых объектов

ReusablePool поддерживает список неиспользуемых объектов Reusable. Если при вызове метода AcquireReusable в пуле имеются свободные объекты Reusable, то один из них удаляется из списка и возвращается методом. После завершения работы с объектом Reusable клиент вызывает метод ReleaseReusable, возвращающий объект в список пула

Пример

Достоинства и недостатки

  • Недостаток: после того, как объект возвращён, он должен вернуться в состояние, пригодное для дальнейшего

использования, а для этого может потребоваться дополнительное программирование

  • Недостаток: если в объекте есть секретные данные, то после его использования необходимо позаботиться о стирании этих данных

Варианты

Если в пуле нет ни одного свободного объекта, возможна одна из трёх стратегий:

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