Node.js 如何在nodejs应用程序中有条件地执行线程

Node.js 如何在nodejs应用程序中有条件地执行线程,node.js,multithreading,Node.js,Multithreading,我的网站的api运行良好,运行速度很快,除了一条路线。由于nodejs是单线程的,所以我们希望将api调用数据单独线程化,这样它就不会阻塞其余的传入调用,而且分叉需要花费很长时间。基本上,我想要的代码如下: router.get(req, res){ if(MasterThread){ create a thread to run the DATA functions } else{ res.json(getDATA()) } }

我的网站的api运行良好,运行速度很快,除了一条路线。由于nodejs是单线程的,所以我们希望将api调用数据单独线程化,这样它就不会阻塞其余的传入调用,而且分叉需要花费很长时间。基本上,我想要的代码如下:

router.get(req, res){
    if(MasterThread){
        create a thread to run the DATA functions
    }
    else{
        res.json(getDATA())
    }
}

这可能吗?我找到的所有教程都暗示我要么必须使用集群,要么必须在main.js中执行线程,这两个我都不想做

当我试图跨2个文件设置线程时,nodejs线程的导入总是空的,或者我的导入从来没有工作过


同样,如果这是一件可能的事情,你可以使用
worker\u线程
在这种情况下,我将它用于我的一个站点,它可以完美地工作在这里是一个很小的例子

const { Worker } = require('worker_threads')
const worker_script = path.join(__dirname, "./worker.js")

    router.get('/', function(req, res) {
              const worker = new Worker(worker_script, {
                workerData: JSON.stringify(obj)
              })
              worker.on("error", (err) => console.log(err))
              worker.on("exit", () => console.log("exit"))
              worker.on("message", (data) => {
                console.log(data)
                res.send(data)
              })

    })
这是工人

const { parentPort, workerData, isMainThread } = require('worker_threads')

if (!isMainThread) {
     console.log("workerData: ", workerData)
      //do some heavy work with the data
    var parsed = JSON.parse(workerData)

    parentPort.postMessage(parsed)

}

您应该在应用程序的根上生成次线程,在路由定义之外,您现在的做法是每次调用路由时都生成一个新线程,这很昂贵,节点必须从冷启动加载所有模块,如果API在一秒钟内被调用100次,这将成为一个问题。将工作线程视为另一个正在运行的节点API,它应该启动一次,然后等待输入。您可以发布无法正常工作的路由的代码吗?如果正确执行异步,网络I/O将不会阻止等待事件循环执行的其他代码。请描述路由期间执行的操作?根据您的回答,我们可以更好地帮助您。谢谢。这是最有意义的!