-
-
Notifications
You must be signed in to change notification settings - Fork 1
Feature Object pool
Пул переиспользуемых экземпляров: вместо создания нового объекта на каждый make() — берём свободный из пула и возвращаем обратно. Снижает аллокации/GC для дорогих объектов в горячих циклах. Уникальная для CloudCastle возможность среди сравниваемых контейнеров.
enablePooling($id, $maxSize) включает пул для сервиса. make($id) при активном пуле берёт свободный экземпляр (или создаёт, пока не достигнут maxSize); releaseToPool($id, $instance) возвращает объект в пул для повторного использования. poolStats(), clearPool(), clearAllPools() — управление. Fast-path make() гейтится дешёвым флагом pooled, поэтому пул не замедляет обычные сервисы.
$c->set(Buffer::class, fn () => new Buffer(8192));
$c->enablePooling(Buffer::class, maxSize: 16);
$buf = $c->make(Buffer::class); // из пула (или создан)
// … работа …
$c->releaseToPool(Buffer::class, $buf); // вернули для переиспользования
$c->poolStats(Buffer::class); // ['configured' => true, 'max_size' => 16, 'available' => …]- Меньше аллокаций/GC для дорогих объектов в тесных циклах (буферы, парсеры, коннекторы).
- Ограничение
maxSizeзащищает от неконтролируемого роста. - Выключен по умолчанию — платите только там, где явно включили.
- Экземпляр из пула переиспользуется — обязательно сбрасывать его состояние перед/после использования.
- Забыли
releaseToPool()— объект «утёк» из пула (эффект как без пула). - Не нужен для дешёвых объектов — усложняет код без выигрыша.
- Пулить только дорогие в создании, часто пересоздаваемые объекты с ясным жизненным циклом.
- Сбрасывать состояние объекта при возврате в пул (
reset()), возвращать черезtry/finally.
- Пулить объекты с «прилипшим» состоянием без сброса — источник трудноуловимых багов.
- Включать пул «на всякий случай» для обычных stateless-сервисов (там нужен singleton
get()).
| Контейнер | Аналог |
|---|---|
| PHP-DI | нет (❌) |
| Symfony | нет встроенного пула в DI ( |
| Laravel | нет (❌) |
| Pimple | нет (❌) |
| Nette | нет (❌) |
Только CloudCastle среди сравниваемых контейнеров.
См. также: Прототипы (make) · Профилирование.
CloudCastle DI · · PHP 8.1+ · PSR-11
GitHub · Packagist · Releases · Discussions · Сравнение
Исходники Wiki — каталог wiki/ в репозитории (синхронизация через GitHub Actions)
- 🏗️ Архитектура
- ⚡ Быстрый старт
- 📊 Сравнение — 5 аналогов, таблица + победители
- 🧩 Возможности (детально) — каждая фича: принцип, +/−, аналоги
- 🧪 Bootstrap
- 🚀 Compiled container
- 🔗 Contextual binding
- 🤖 Autowiring
- 📄 Конфигурация
- 📖 Справочник конфигурации
- 📂 Сканирование классов
- 🌍 Глобальный реестр
- 🏷️ Теги и декораторы
- 🔗 call(), bind(), hooks
- 🔄 Прототипы, alias, lazy, lazyGhost
- 📋 Справочник API
- 🏭 Фабрики и singleton