From 168db6891f45dd2a1b31fbf26cbbc54c124f629a Mon Sep 17 00:00:00 2001 From: Aya Morisawa Date: Tue, 20 Nov 2018 12:25:58 +0900 Subject: [PATCH] Refactor spawnWorkers (#3338) --- src/index.ts | 36 +++++++++++++----------------------- 1 file changed, 13 insertions(+), 23 deletions(-) diff --git a/src/index.ts b/src/index.ts index 7ad52ccf2a..f5e8adb707 100644 --- a/src/index.ts +++ b/src/index.ts @@ -219,31 +219,21 @@ function checkMongoDb(config: Config) { }); } -function spawnWorkers(limit: number) { - Logger.info('Starting workers...'); +async function spawnWorkers(limit: number) { + const workers = Math.min(limit, os.cpus().length); + Logger.info(`Starting ${workers} worker${workers === 1 ? '' : 's'}...`); + await Promise.all([...Array(workers)].map(spawnWorker)); + Logger.succ('All workers started'); +} +function spawnWorker(): Promise { return new Promise(res => { - // Count the machine's CPUs - const cpuCount = os.cpus().length; - - const count = limit || cpuCount; - let started = 0; - - // Create a worker for each CPU - for (let i = 0; i < count; i++) { - const worker = cluster.fork(); - - worker.on('message', message => { - if (message !== 'ready') return; - started++; - - // When all workers started - if (started == count) { - Logger.succ('All workers started'); - res(); - } - }); - } + const worker = cluster.fork(); + worker.on('message', message => { + if (message !== 'ready') return; + Logger.succ('A worker started'); + res(); + }); }); }