Требует ли шаблон пула объектов создания объектов еще до того, как они понадобятся - PullRequest
0 голосов
/ 02 августа 2020

Если я использую шаблон проектирования пула объектов, должен ли я создавать объекты до того, как они кому-то понадобятся, или что я могу создавать каждый объект только тогда, когда он кому-то нужен, а затем (после того, как он его использует), помещать его в бассейн? Таким образом, начать с пустого пула и наполнять его со временем, и создавать объекты только тогда, когда кому-то нужно их использовать, а в настоящее время их нет в пуле?

Ответы [ 3 ]

0 голосов
/ 02 августа 2020

Оба подхода являются допустимыми реализациями шаблона проектирования . Вы можете заполнить пул заранее или по мере необходимости, в зависимости от требований.

Типичным вариантом использования пула объектов являются потоки. В Java мы можем видеть два подхода, реализованные в Cached ThreadPool и Fixed ThreadPool . Кэшированная версия создает потоки по запросу; фиксированная версия создает потоки заранее.

0 голосов
/ 04 августа 2020

Основная цель шаблона пула объектов - минимизировать затраты на производительность дорогостоящих экземпляров. Дорого может означать: использует / блокирует ценные ресурсы или требует много времени для создания / настройки / инициализации. Повторное использование экземпляров позволяет избежать чрезмерного создания экземпляров и управлять ограниченными ресурсами.

Самый известный пример - это пул потоков. Он используется многими языками для повышения производительности потоковой передачи. Хотя потоки используются для увеличения производительности за счет распараллеливания операций или задач, сами потоки очень дороги в создании. Потоки управляются на уровне ОС. Необходимо выделить дополнительную память и скопировать исполняемый код и все ресурсы, на которые есть ссылки. Необходимо создать новый контекст потока, такой как стеки вызовов, и инициализировать указатели инструкций ... Значительно дешевле повторно использовать ранее использованный поток.

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

Эффективные реализации пула имеют минимальный и максимальный предел и реализуются как очередь из объекты. В зависимости от контекста вы также можете добавить вторую очередь для постановки задач или запросов в случае, если все объекты пула используются. Существуют разные алгоритмы для обработки запросов на ресурсы, например, с использованием очередей приоритетов или циклического перебора. при управлении экземплярами объектов шаблон пула объектов имеет смысл только в сценарии ios, где экземпляры используются в течение короткого времени. В противном случае было бы лучше создать экземпляры напрямую (если ресурсы не ограничены).

0 голосов
/ 02 августа 2020

From wiki :

Шаблон пула объектов - это шаблон проектирования для создания программного обеспечения, который использует набор инициализированных объектов готовых использовать - «пул» - , а не выделять и уничтожать их по требованию .

Таким образом, основная идея этого шаблона состоит в том, чтобы предварительно создайте пул объектов в ситуациях, когда стоимость создания и инициализации экземпляра класса высока, и в других ситуациях, когда создание экземпляра объекта по запросу будет менее эффективным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...