-import FixedThreadPool, {
+import { EventEmitter } from 'events'
+import {
+ FixedThreadPool,
FixedThreadPoolOptions,
WorkerWithMessageChannel
} from './fixed'
-import { EventEmitter } from 'events'
-
class MyEmitter extends EventEmitter {}
export type DynamicThreadPoolOptions = FixedThreadPoolOptions
* @author [Alessandro Pio Ardizio](https://github.com/pioardi)
* @since 0.0.1
*/
-export default class DynamicThreadPool<
+/* eslint-disable @typescript-eslint/no-explicit-any */
+export class DynamicThreadPool<
Data = any,
Response = any
> extends FixedThreadPool<Data, Response> {
+ /* eslint-enable @typescript-eslint/no-explicit-any */
public readonly emitter: MyEmitter
/**
this.emitter = new MyEmitter()
}
- protected _chooseWorker (): WorkerWithMessageChannel {
- let worker: WorkerWithMessageChannel
+ protected chooseWorker (): WorkerWithMessageChannel {
+ let worker: WorkerWithMessageChannel | undefined
for (const entry of this.tasks) {
if (entry[1] === 0) {
worker = entry[0]
} else {
if (this.workers.length === this.max) {
this.emitter.emit('FullPool')
- return super._chooseWorker()
+ return super.chooseWorker()
}
// all workers are busy create a new worker
- const worker = this._newWorker()
- worker.port2.on('message', (message) => {
+ const worker = this.newWorker()
+ worker.port2?.on('message', (message: { kill?: number }) => {
if (message.kill) {
worker.postMessage({ kill: 1 })
- worker.terminate()
+ void worker.terminate()
// clean workers from data structures
const workerIndex = this.workers.indexOf(worker)
this.workers.splice(workerIndex, 1)
}
}
}
-
-module.exports = DynamicThreadPool