@thermopylae/lib.pool
v1.0.1
Published
Resources pool.
Downloads
35
Maintainers
Readme
Resources pool.
Install
npm install @thermopylae/lib.poolDescription
This package contains a set of pools for resource management:
- Array Object Pool - a pool which manages object resources. Internal implementation uses a single array to keep used and free objects. All operations are constant, while memory footprint is low.
- DLL Object Pool - a pool which manages object resources. Internal implementation uses two doubly linked lists to keep used and free objects. All operations are constant, while memory footprint is higher than the one of Array Object Pool.
The 'go-to' option is Array Object Pool.
Usage
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 usedDLLObjectPool:
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 againAPI Reference
API documentation is available here.
It can also be generated by issuing the following commands:
git clone [email protected]:marinrusu1997/thermopylae.git
cd thermopylae
yarn install
yarn workspace @thermopylae/lib.pool run docAuthor
👤 Rusu Marin
- GitHub: @marinrusu1997
- Email: [email protected]
- LinkedIn: @marinrusu1997
📝 License
Copyright © 2021 Rusu Marin. This project is MIT licensed.
