-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 EventHandler,
type IWorker,
WorkerTypes,
type WorkerUsage
} from './worker.js'
-import { checkWorkerNodeArguments, createWorker } from './utils.js'
/**
* Worker node.
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<Task<Data>>()
this.onBackPressureStarted = false
this.taskFunctionsUsage = new Map<string, WorkerUsage>()
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
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
this.removeAllListeners()
switch (this.info.type) {
case WorkerTypes.thread:
+ this.worker.unref?.()
await this.worker.terminate?.()
break
case WorkerTypes.cluster: