X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fpools%2Fworker-node.ts;h=1a4df6cd4afd479607a267e0d5ada4744a312e9e;hb=ecde6ea8c439bbdd9dc2ca118731b5006a1a9884;hp=6a5881da097bbbd727806a024edf9c6ab06eb7c3;hpb=67f3f2d6cb8f915ec71f81c4533ab80a6c6a6f0f;p=poolifier.git diff --git a/src/pools/worker-node.ts b/src/pools/worker-node.ts index 6a5881da..1a4df6cd 100644 --- a/src/pools/worker-node.ts +++ b/src/pools/worker-node.ts @@ -1,16 +1,20 @@ -import { MessageChannel } from 'node:worker_threads' import { EventEmitter } from 'node:events' +import { MessageChannel } from 'node:worker_threads' + import { CircularArray } from '../circular-array.js' -import type { Task } from '../utility-types.js' -import { DEFAULT_TASK_NAME, getWorkerId, getWorkerType } from '../utils.js' import { Deque } from '../deque.js' +import type { Task } from '../utility-types.js' +import { DEFAULT_TASK_NAME } from '../utils.js' +import { + checkWorkerNodeArguments, + createWorker, + getWorkerId, + getWorkerType +} from './utils.js' import { - type ErrorHandler, - type ExitHandler, + type EventHandler, type IWorker, type IWorkerNode, - type MessageHandler, - type OnlineHandler, type StrategyData, type WorkerInfo, type WorkerNodeOptions, @@ -18,7 +22,6 @@ import { WorkerTypes, type WorkerUsage } from './worker.js' -import { checkWorkerNodeArguments, createWorker } from './utils.js' /** * Worker node. @@ -64,7 +67,8 @@ export class WorkerNode if (this.info.type === WorkerTypes.thread) { this.messageChannel = new MessageChannel() } - this.tasksQueueBackPressureSize = opts.tasksQueueBackPressureSize + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + this.tasksQueueBackPressureSize = opts.tasksQueueBackPressureSize! this.tasksQueue = new Deque>() this.onBackPressureStarted = false this.taskFunctionsUsage = new Map() @@ -80,8 +84,7 @@ export class WorkerNode const tasksQueueSize = this.tasksQueue.push(task) if (this.hasBackPressure() && !this.onBackPressureStarted) { this.onBackPressureStarted = true - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - this.emit('backPressure', { workerId: this.info.id! }) + this.emit('backPressure', { workerId: this.info.id }) this.onBackPressureStarted = false } return tasksQueueSize @@ -92,8 +95,7 @@ export class WorkerNode const tasksQueueSize = this.tasksQueue.unshift(task) if (this.hasBackPressure() && !this.onBackPressureStarted) { this.onBackPressureStarted = true - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - this.emit('backPressure', { workerId: this.info.id! }) + this.emit('backPressure', { workerId: this.info.id }) this.onBackPressureStarted = false } return tasksQueueSize @@ -136,6 +138,7 @@ export class WorkerNode this.removeAllListeners() switch (this.info.type) { case WorkerTypes.thread: + this.worker.unref?.() await this.worker.terminate?.() break case WorkerTypes.cluster: @@ -151,11 +154,7 @@ export class WorkerNode /** @inheritdoc */ public registerWorkerEventHandler ( event: string, - handler: - | OnlineHandler - | MessageHandler - | ErrorHandler - | ExitHandler + handler: EventHandler ): void { this.worker.on(event, handler) } @@ -163,11 +162,7 @@ export class WorkerNode /** @inheritdoc */ public registerOnceWorkerEventHandler ( event: string, - handler: - | OnlineHandler - | MessageHandler - | ErrorHandler - | ExitHandler + handler: EventHandler ): void { this.worker.once(event, handler) }