+ private async getWorkerSetElement (): Promise<WorkerSetElement> {
+ let chosenWorkerSetElement: WorkerSetElement | undefined
+ for (const workerSetElement of this.workerSet) {
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ if (workerSetElement.numberOfWorkerElements < this.workerOptions.elementsPerWorker!) {
+ chosenWorkerSetElement = workerSetElement
+ break
+ }
+ }
+ if (chosenWorkerSetElement == null) {
+ chosenWorkerSetElement = this.addWorkerSetElement()
+ // Add worker set element sequentially to optimize memory at startup
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ this.workerOptions.workerStartDelay! > 0 &&
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
+ (await sleep(randomizeDelay(this.workerOptions.workerStartDelay!)))
+ }
+ return chosenWorkerSetElement
+ }
+
+ private getWorkerSetElementByWorker (worker: Worker): WorkerSetElement | undefined {
+ let workerSetElt: WorkerSetElement | undefined
+ for (const workerSetElement of this.workerSet) {
+ if (workerSetElement.worker.threadId === worker.threadId) {
+ workerSetElt = workerSetElement
+ break
+ }
+ }
+ return workerSetElt