Node has recently added worker_thread, giving us ability to run long running synchronous tasks in a separate thread. But API is not very seamless.
Threadifier allows you to run any function in different thread seamlessly through its easy to use promise based api. It uses worker_threads module to run the given function in a new thread and return the response asynchronously so your event loop keeps running. Also you can create a worker thread pool to reuse the same threads for various tasks.
npm i @shahidcodes/threadifier
constThreadifier=require('@shahidcodes/threadifier');functionrunTask(arg){leti=0;for(letindex=0;index<99999999;index++){i++;}return`worked- loop count ${i}, arg: ${JSON.stringify(arg)}`;}constargs={name: 'Shahid'};Threadifier.run(runTask,args).then(console.log).catch(console.error);const{ WorkerPool }=require('@shahidcodes/threadifier');constpool=newWorkerPool(10);functionrunTask(args){leti=0;for(letindex=0;index<999999999;index++){i++;}return{ i, args };}constargs={name: 'Shahid'};for(letindex=0;index<100;index++){pool.queueTask(runTask,args).then(result=>console.log(`from worker:`,result)).catch(console.error);}You should not create many threads at once. If you're going to use this in a request handler/controller then better use a fixed size thread pool. And queue tasks otherwise you'll see CPU spikes when you spawn many many threads than the server can handle. One other reason you should use a thread pool is creating worker thread is expensive so if you're creating threads again n again then better use pool.
Please check the examples directory.
You're free to submit PRs. There are no build/tests yet. But it is in roadmap.
Feel free to contact me on twitter.com/shahidcodes