post node v11.7.0 релизы Модуль 'worker_threads' доступен без экспериментального флага.он отлично подходит для однопроцессного и многопоточного использования.в версиях до 11.7.0 вам необходимо передать флаг --experimental-worker для доступа к нему.
Посетить официальную документацию Worker-Threads
/* app.js */
/* your code */
const { Worker, isMainThread, threadId, Worker, parentPort, workerData } = require('worker_threads')
console.log('is this main process', isMainThread)
app.post('/saveuser', function(){
let userSaveWorker = new Worker('name_of_another_script.js', { workerData: 'pass any type of data' })
userSaveWorker.on('message', returnData => {
// do whatever you wants to do with data returned from worker
// return response to user
})
userSaveWorker.unref() // this will allow worker to terminate
userSaveWorker.terminate() // this will forcefully terminate it
// you can use it in message listner
userSaveWorker.on('end', () => /* gets called when worker process gets terminated */);
})
теперь скрипт для работникаprocess
name_of_another_script.js
const { Worker, isMainThread, threadId, Worker, parentPort, workerData } = require('worker_threads')
console.log('is this main process', isMainThread)
console.log('data received from parentProcess', workerData)
/* your code */
// do process & then send message back to parent
parentPort.postMessage('your processed data or result any data type')
// this will be received in app.js as .on('message') listener
вы даже можете запустить рабочий процесс без другой функции сценария или кода в виде строки вместо имени файла и передать другую опцию {eval: true}, и это сработает, вы даже можете передать workerDataа также ...