36 lines
931 B
JavaScript
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}`))
|
||
|
})
|
||
|
})
|
||
|
}
|