node-threads-pool
Version:
Node-Threads-Pool is a tool for creating thread pools in Node.js, making it easy to implement efficient parallel computing. With Node-Threads-Pool, you can easily create and manage multiple threads, allocate tasks to worker threads in the thread pool, and
50 lines (48 loc) • 1.29 kB
JavaScript
const {Worker} = require("worker_threads");
module.exports = class {
constructor(max = 1) {
this._max = max;
this._queue = [];
this._workers = new Set();
};
async createWorker(filename, options, resolve, reject) {
const self = this;
const {_queue, _workers} = this;
const worker = new Worker(filename, options);
worker.on("message", message => {
resolve(message);
worker.terminate();
});
worker.on("error", error => {
resolve(error);
worker.terminate();
});
worker.on("exit", code => {
_workers.delete(worker);
if(_queue.length > 0) {
const {filename, options, resolve, reject} = _queue.splice(0, 1)[0];
self.createWorker(filename, options, resolve, reject);
}
if(code !== 0) {
reject(new Error(`thread error. code: ${code}`));
}
});
_workers.add(worker);
}
async run(filename, options) {
const self = this;
const {_workers, _queue, _max} = this;
return new Promise((resolve, reject) => {
if(_workers.size < _max) {
self.createWorker(filename, options, resolve, reject);
} else {
_queue.push({
filename,
options,
resolve,
reject
});
}
});
}
}