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 = WorkerConstants.DEFAULT_ELEMENTS_PER_WORKER;
+ if (
+ Configuration.getWorker()?.elementsPerWorker === 'auto' &&
+ this.numberOfChargingStations > availableParallelism()
+ ) {
+ elementsPerWorker = Math.round(this.numberOfChargingStations / availableParallelism());
+ }
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,
poolOptions: {
workerChoiceStrategy: Configuration.getWorker().poolStrategy,
messageHandler: this.messageHandler.bind(this) as (message: unknown) => void,