- /**
- * Checks if the given worker is registered in the pool.
- *
- * @param worker - Worker to check.
- * @returns `true` if the worker is registered in the pool.
- */
- private checkWorker (worker: Worker): boolean {
- if (this.getWorkerKey(worker) == null) {
- throw new Error('Worker could not be found in the pool')
+ private executeTask (workerNodeKey: number, task: Task<Data>): void {
+ this.beforeTaskExecutionHook(workerNodeKey)
+ this.sendToWorker(this.workerNodes[workerNodeKey].worker, task)
+ }
+
+ private enqueueTask (workerNodeKey: number, task: Task<Data>): number {
+ return this.workerNodes[workerNodeKey].tasksQueue.push(task)
+ }
+
+ private dequeueTask (workerNodeKey: number): Task<Data> | undefined {
+ return this.workerNodes[workerNodeKey].tasksQueue.shift()
+ }
+
+ private tasksQueueSize (workerNodeKey: number): number {
+ return this.workerNodes[workerNodeKey].tasksQueue.length
+ }
+
+ private flushTasksQueue (workerNodeKey: number): void {
+ if (this.tasksQueueSize(workerNodeKey) > 0) {
+ for (const task of this.workerNodes[workerNodeKey].tasksQueue) {
+ this.executeTask(workerNodeKey, task)
+ }
+ }
+ }
+
+ private flushTasksQueueByWorker (worker: Worker): void {
+ const workerNodeKey = this.getWorkerNodeKey(worker)
+ this.flushTasksQueue(workerNodeKey)
+ }
+
+ private flushTasksQueues (): void {
+ for (const [workerNodeKey] of this.workerNodes.entries()) {
+ this.flushTasksQueue(workerNodeKey)