ddstats-server/libs/utils/multithread.js

37 lines
921 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: 'initWorker',
name: `Worker ${parseInt(i) + 1}`
})
}
}
let spreadIndex = 0
export function spread(script, data) {
return new Promise(
(resolve, reject) => {
const worker = workerFarm[spreadIndex]
worker.postMessage({
type: 'runScript',
script,
data
})
worker.once('message', result => resolve(result))
++spreadIndex
if(spreadIndex >= workerFarm.length)
spreadIndex = 0
}
)
}