ea50ebdbe036353070af773d4470213c10061237
1 import { CircularArray
} from
'../circular-array'
2 import { Queue
} from
'../queue'
16 * @typeParam Worker - Type of worker.
17 * @typeParam Data - Type of data sent to the worker. This can only be structured-cloneable data.
19 export class WorkerNode
<Worker
extends IWorker
, Data
= unknown
>
20 implements IWorkerNode
<Worker
, Data
> {
21 public readonly worker
: Worker
22 public readonly info
: WorkerInfo
23 public usage
: WorkerUsage
24 private readonly tasksQueue
: Queue
<Task
<Data
>>
27 * Constructs a new worker node.
29 * @param worker - The worker.
30 * @param workerType - The worker type.
33 constructor (worker
: Worker
, workerType
: WorkerType
) {
35 this.info
= this.initWorkerInfo(worker
, workerType
)
36 this.usage
= this.initWorkerUsage()
37 this.tasksQueue
= new Queue
<Task
<Data
>>()
41 public tasksQueueSize (): number {
42 return this.tasksQueue
.size
46 * Worker node tasks queue maximum size.
48 * @returns The tasks queue maximum size.
50 private tasksQueueMaxSize (): number {
51 return this.tasksQueue
.maxSize
55 public enqueueTask (task
: Task
<Data
>): number {
56 return this.tasksQueue
.enqueue(task
)
60 public dequeueTask (): Task
<Data
> | undefined {
61 return this.tasksQueue
.dequeue()
65 public clearTasksQueue (): void {
66 this.tasksQueue
.clear()
69 public resetUsage (): void {
70 this.usage
= this.initWorkerUsage()
73 private initWorkerInfo (worker
: Worker
, workerType
: WorkerType
): WorkerInfo
{
75 id
: this.getWorkerId(worker
, workerType
),
82 private initWorkerUsage (): WorkerUsage
{
83 const getTasksQueueSize
= (): number => {
84 return this.tasksQueueSize()
86 const getTasksQueueMaxSize
= (): number => {
87 return this.tasksQueueMaxSize()
93 get
queued (): number {
94 return getTasksQueueSize()
96 get
maxQueued (): number {
97 return getTasksQueueMaxSize()
102 history
: new CircularArray()
105 history
: new CircularArray()
109 history
: new CircularArray()
112 history
: new CircularArray()
119 * Gets the worker id.
121 * @param worker - The worker.
122 * @param workerType - The worker type.
123 * @returns The worker id.
125 private getWorkerId (
127 workerType
: WorkerType
128 ): number | undefined {
129 if (workerType
=== WorkerTypes
.thread
) {
130 return worker
.threadId
131 } else if (workerType
=== WorkerTypes
.cluster
) {