ddstats-server/libs/utils/multithread.js
2021-10-13 16:40:18 +02:00

36 lines
931 B
JavaScript

import { Worker } from 'worker_threads'
let workerFarm = []
export function initWorkers(threads) {
for (let i = 0; i < threads; ++i) {
workerFarm.push(new Worker('./libs/utils/multithread/genericWorker.js'))
}
for (const i in workerFarm) {
const worker = workerFarm[i]
worker.postMessage({
type: 'setName',
name: `Worker ${parseInt(i) + 1}`
})
}
}
export function spread(threads, script, data, shouldEval) {
return new Promise((resolve, reject) => {
const worker = new Worker(
script,
{
workerData: data,
eval: shouldEval ?? false
}
)
worker.on('message', resolve)
worker.on('error', reject)
worker.on('exit', (code) => {
if (code !== 0)
reject(new Error(`Process stopped with code: ${code}`))
})
})
}