Split CPU intensive code into worker threads.
worker.mjs:
import{parentPort}from"node:worker_threads"parentPort.on("message",async({ a, b })=>{awaitnewPromise((resolve)=>setTimeout(resolve,100))constreturnValue=a+bparentPort.postMessage(returnValue)})main.mjs:
import{createWorkers}from"@jsenv/workers"constworkers=createWorkers(newURL("./worker.mjs",import.meta.url))constvalue=awaitworkers.addJob({a: 1,b: 1})console.log(value)// 2By default the pool size is dynamic but it can be fixed to X workers.
import{createWorkers}from"@jsenv/workers"constworkers=createWorkers(newURL("./worker.mjs"),{minWorkers: 10,maxWorkers: 10,})