2021-10-13 16:40:18 +02:00
|
|
|
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({
|
2021-10-13 19:45:59 +02:00
|
|
|
type: 'initWorker',
|
2021-10-13 16:40:18 +02:00
|
|
|
name: `Worker ${parseInt(i) + 1}`
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-10-13 19:45:59 +02:00
|
|
|
let spreadIndex = 0
|
|
|
|
export function spread(script, data) {
|
|
|
|
return new Promise(
|
|
|
|
(resolve, reject) => {
|
|
|
|
const worker = workerFarm[spreadIndex]
|
|
|
|
worker.postMessage({
|
|
|
|
type: 'runScript',
|
|
|
|
script,
|
|
|
|
data
|
|
|
|
})
|
2021-10-13 16:40:18 +02:00
|
|
|
|
2021-10-13 19:45:59 +02:00
|
|
|
worker.once('message', result => resolve(result))
|
|
|
|
|
|
|
|
++spreadIndex
|
|
|
|
if(spreadIndex >= workerFarm.length)
|
|
|
|
spreadIndex = 0
|
|
|
|
}
|
|
|
|
)
|
2021-10-13 16:40:18 +02:00
|
|
|
}
|