import { isMainThread } from 'node:worker_threads';
import chalk from 'chalk';
+import { availableParallelism } from 'poolifier';
import { waitChargingStationEvents } from './ChargingStationUtils';
import type { AbstractUIServer } from './ui-server/AbstractUIServer';
logPrefix,
logger,
} from '../utils';
-import { type WorkerAbstract, WorkerFactory } from '../worker';
+import { type WorkerAbstract, WorkerConstants, WorkerFactory } from '../worker';
const moduleName = 'Bootstrap';
}
private initializeWorkerImplementation(): void {
+ let elementsPerWorker: number;
+ if (Configuration.getWorker()?.elementsPerWorker === 'auto') {
+ elementsPerWorker =
+ this.numberOfChargingStations > availableParallelism()
+ ? Math.round(this.numberOfChargingStations / availableParallelism())
+ : 1;
+ }
this.workerImplementation === null &&
(this.workerImplementation = WorkerFactory.getWorkerImplementation<ChargingStationWorkerData>(
this.workerScript,
elementStartDelay: Configuration.getWorker().elementStartDelay,
poolMaxSize: Configuration.getWorker().poolMaxSize,
poolMinSize: Configuration.getWorker().poolMinSize,
- elementsPerWorker: Configuration.getWorker().elementsPerWorker,
+ elementsPerWorker:
+ elementsPerWorker ?? (Configuration.getWorker().elementsPerWorker as number),
poolOptions: {
workerChoiceStrategy: Configuration.getWorker().poolStrategy,
messageHandler: this.messageHandler.bind(this) as (message: unknown) => void,