Resources pool.
npm install @thermopylae/lib.pool
This package contains a set of pools for resource management:
The 'go-to' option is Array Object Pool.
ArrayObjectPool:
import { ArrayObjectPool } from '@thermopylae/lib.pool';
/* Create a static pool */
const pool = new ArrayObjectPool({
// if you ommit capacity, pool will grow as you use it
capacity: 1,
initializer(cacheEntry, args) {
cacheEntry['key'] = args[0];
cacheEntry['value'] = args[1];
return cacheEntry;
},
deInitializer(cacheEntry) {
// GC can collect the values now
cacheEntry['key'] = undefined;
cacheEntry['value'] = undefined;
return cacheEntry;
}
});
/* Acquire resource */
const resourceHandle = pool.acquire('key1', 'value1');
console.log(resourceHandle.value); // { key: 'key1', value: 'value1' }
try {
pool.acquire('key1', 'value1');
} catch (e) {
console.error(e);
}
/* Release resource */
pool.release(resourceHandle);
/* Release all resources */
pool.acquire('key1', 'value1');
pool.releaseAll(); // after releasing all resources, you can acquire them again
/* Clear pool */
// it's RECOMMENDED to release resources before calling clear,
// as this method won't call object destructors
pool.clear(); // after this operation pool should no longer be used
DLLObjectPool:
import { DLLObjectPool } from '@thermopylae/lib.pool';
/* Create pool */
const pool = new DLLObjectPool({
capacity: 1,
constructor(key: string, value: string) {
return { key, value };
},
initializer(cacheEntry: object, key: string, value: string) {
cacheEntry.key = key;
cacheEntry.value = value;
return cacheEntry;
},
destructor(cacheEntry: object) {
cacheEntry.key = undefined;
cacheEntry.value = undefined;
return cacheEntry;
}
});
/* Use pool */
let resourceHandle = pool.acquire('key1', 'value1');
console.log(resourceHandle.value); // { key: 'key1', value: 'value1' }
pool.releaseHandle(resourceHandle);
console.log(resourceHandle.value); // { key: undefined, value: undefined }
const cacheEntry = { key: 'key', value: 'value' };
resourceHandle = pool.preempt(cacheEntry);
console.log(resourceHandle.value); // { key: 'key', value: 'value' }
pool.releaseObject(cacheEntry); // works slower, has O(n) complexity
pool.acquire('key', 'value');
pool.releaseAll(); // after release all, objects can be acquired again
API documentation is available here.
It can also be generated by issuing the following commands:
git clone git@github.com:marinrusu1997/thermopylae.git
cd thermopylae
yarn install
yarn workspace @thermopylae/lib.pool run doc
👤 Rusu Marin
Copyright © 2021 Rusu Marin.
This project is MIT licensed.