Основная цель шаблона пула объектов - минимизировать затраты на производительность дорогостоящих экземпляров. Дорого может означать: использует / блокирует ценные ресурсы или требует много времени для создания / настройки / инициализации. Повторное использование экземпляров позволяет избежать чрезмерного создания экземпляров и управлять ограниченными ресурсами.
Самый известный пример - это пул потоков. Он используется многими языками для повышения производительности потоковой передачи. Хотя потоки используются для увеличения производительности за счет распараллеливания операций или задач, сами потоки очень дороги в создании. Потоки управляются на уровне ОС. Необходимо выделить дополнительную память и скопировать исполняемый код и все ресурсы, на которые есть ссылки. Необходимо создать новый контекст потока, такой как стеки вызовов, и инициализировать указатели инструкций ... Значительно дешевле повторно использовать ранее использованный поток.
Эти затраты также являются причиной того, что вы не будете слепо заполнять пул заранее. Если вы не знаете, используется ли какой-либо объект в пуле, вы должны создавать объекты по запросу. Если вы знаете, что объекты пула, скорее всего, будут использоваться, вы можете инициализировать пул объектами. В зависимости от контекста вы либо заполняете пул до его емкости, либо только до определенного количества объектов и генерируете больше по запросу.
Эффективные реализации пула имеют минимальный и максимальный предел и реализуются как очередь из объекты. В зависимости от контекста вы также можете добавить вторую очередь для постановки задач или запросов в случае, если все объекты пула используются. Существуют разные алгоритмы для обработки запросов на ресурсы, например, с использованием очередей приоритетов или циклического перебора. при управлении экземплярами объектов шаблон пула объектов имеет смысл только в сценарии ios, где экземпляры используются в течение короткого времени. В противном случае было бы лучше создать экземпляры напрямую (если ресурсы не ограничены).