- await this.startWorker();
- // Start worker sequentially to optimize memory at startup
- await Utils.sleep(Constants.START_WORKER_DELAY);
+ this.addWorkerSetElement();
+ // Add worker set element sequentially to optimize memory at startup
+ this.workerOptions.workerStartDelay > 0 && (await sleep(this.workerOptions.workerStartDelay));
+ }
+
+ /** @inheritDoc */
+ public async stop(): Promise<void> {
+ for (const workerSetElement of this.workerSet) {
+ await workerSetElement.worker.terminate();
+ }
+ this.workerSet.clear();
+ }
+
+ /** @inheritDoc */
+ public async addElement(elementData: WorkerData): Promise<void> {
+ if (!this.workerSet) {
+ throw new Error("Cannot add a WorkerSet element: workers' set does not exist");
+ }
+ const workerSetElement = await this.getWorkerSetElement();
+ workerSetElement.worker.postMessage({
+ id: WorkerMessageEvents.startWorkerElement,
+ data: elementData,
+ });
+ ++workerSetElement.numberOfWorkerElements;
+ // Add element sequentially to optimize memory at startup
+ if (this.workerOptions.elementStartDelay > 0) {
+ await sleep(this.workerOptions.elementStartDelay);
+ }