repositories
/
e-mobility-charging-stations-simulator.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add proper worker set elements reference counting.
[e-mobility-charging-stations-simulator.git]
/
src
/
worker
/
WorkerSet.ts
diff --git
a/src/worker/WorkerSet.ts
b/src/worker/WorkerSet.ts
index a8aa8a37cf5820a5097689ef36b7d58ae59f9ed6..50d099d856633ff5cbc8ad6c5d1f57813a750b1e 100644
(file)
--- a/
src/worker/WorkerSet.ts
+++ b/
src/worker/WorkerSet.ts
@@
-1,13
+1,13
@@
+import { WorkerData, WorkerEvents, WorkerSetElement } from '../types/Worker';
+
import Constants from '../utils/Constants';
import Utils from '../utils/Utils';
import { Worker } from 'worker_threads';
import Constants from '../utils/Constants';
import Utils from '../utils/Utils';
import { Worker } from 'worker_threads';
-import WorkerData from '../types/WorkerData';
-import Wrk from './Worker';
+import Wrk from './Wrk';
export default class WorkerSet extends Wrk {
public maxElementsPerWorker: number;
export default class WorkerSet extends Wrk {
public maxElementsPerWorker: number;
- private workers: Set<Worker>;
- private lastWorkerNumberOfElements: number;
+ private workers: Set<WorkerSetElement>;
/**
* Create a new `WorkerSet`.
/**
* Create a new `WorkerSet`.
@@
-17,9
+17,8
@@
export default class WorkerSet extends Wrk {
*/
constructor(workerScript: string, maxElementsPerWorker = 1) {
super(workerScript);
*/
constructor(workerScript: string, maxElementsPerWorker = 1) {
super(workerScript);
- this.workers = new Set<Worker>();
+ this.workers = new Set<Worker
SetElement
>();
this.maxElementsPerWorker = maxElementsPerWorker;
this.maxElementsPerWorker = maxElementsPerWorker;
- this.lastWorkerNumberOfElements = 0;
}
get size(): number {
}
get size(): number {
@@
-35,14
+34,13
@@
export default class WorkerSet extends Wrk {
if (!this.workers) {
throw Error('Cannot add a WorkerSet element: workers set does not exist');
}
if (!this.workers) {
throw Error('Cannot add a WorkerSet element: workers set does not exist');
}
- if (this.
lastWorkerNumberOf
Elements >= this.maxElementsPerWorker) {
+ if (this.
getLastWorkerSetElement().numberOfWorker
Elements >= this.maxElementsPerWorker) {
void this.startWorker();
void this.startWorker();
- this.lastWorkerNumberOfElements = 0;
// Start worker sequentially to optimize memory at startup
void Utils.sleep(Constants.START_WORKER_DELAY);
}
// Start worker sequentially to optimize memory at startup
void Utils.sleep(Constants.START_WORKER_DELAY);
}
- this.getLastWorker().postMessage({ id:
Consta
nts.START_WORKER_ELEMENT, workerData: elementData });
- this.
lastWorkerNumberOf
Elements++;
+ this.getLastWorker().postMessage({ id:
WorkerEve
nts.START_WORKER_ELEMENT, workerData: elementData });
+ this.
getLastWorkerSetElement().numberOfWorker
Elements++;
}
/**
}
/**
@@
-71,14
+69,18
@@
export default class WorkerSet extends Wrk {
reject(new Error(`Worker stopped with exit code ${code}`));
}
});
reject(new Error(`Worker stopped with exit code ${code}`));
}
});
- this.workers.add(
worker
);
+ this.workers.add(
{ worker, numberOfWorkerElements: 0 }
);
});
}
});
}
- private getLastWorker
(): Worker
{
- let worker
: Worker
;
+ private getLastWorker
SetElement(): WorkerSetElement
{
+ let worker
SetElement: WorkerSetElement
;
// eslint-disable-next-line no-empty
// eslint-disable-next-line no-empty
- for (worker of this.workers) { }
- return worker;
+ for (workerSetElement of this.workers) { }
+ return workerSetElement;
+ }
+
+ private getLastWorker(): Worker {
+ return this.getLastWorkerSetElement().worker;
}
}
}
}