Node.js子进程的代码是否每次生成时都会被解析?

Node.js子进程的代码是否每次生成时都会被解析?,node.js,Node.js,通常的做法是将长时间运行的任务外包给子进程。现在,我有一个长时间运行的函数(它将阻塞事件循环几秒钟),我想将其外包给一个子进程。每次调用此函数时,都会生成一个子进程,并在函数返回后关闭它。Node.js是以某种方式缓存该代码的中间表示,还是每次子进程生成时都会对其进行解析?在这种情况下,代码会得到优化吗 幸运的是,根据我的测量,生成子进程不会像我担心的那样增加太多的开销。但尽管如此,如果代码每次都被解析,而从未得到优化,那将是资源的损失 Node.js是以某种方式缓存该代码的中间表示形式,还是每

通常的做法是将长时间运行的任务外包给子进程。现在,我有一个长时间运行的函数(它将阻塞事件循环几秒钟),我想将其外包给一个子进程。每次调用此函数时,都会生成一个子进程,并在函数返回后关闭它。Node.js是以某种方式缓存该代码的中间表示,还是每次子进程生成时都会对其进行解析?在这种情况下,代码会得到优化吗

幸运的是,根据我的测量,生成子进程不会像我担心的那样增加太多的开销。但尽管如此,如果代码每次都被解析,而从未得到优化,那将是资源的损失

Node.js是以某种方式缓存该代码的中间表示形式,还是每次子进程生成时都会对其进行解析

假设您谈论的是
child\u process.spawn()
,它将启动一个全新的进程,如果您运行的是node.js程序,它将是一个全新的node.js进程,它将从头开始从磁盘读取代码并再次解析

在这种情况下,代码会得到优化吗

不清楚你所说的“代码是否得到优化”是什么意思。Node.js将执行与在主进程或以
spawn()
启动的进程中运行时相同的优化

与每次启动一个新流程相比,更有效的方法可能是创建一个持久的工作流程,启动几个工作流程,然后创建一个工作队列,并将工作项传递给每个工作流程。它们完成工作并返回结果,然后继续运行,等待下一个工作项。您可以使用任意数量的进程间通信方法与工作进程通信,从内置的stdio和stdout通信一直到使每个进程都成为可以向其发送请求的本地端口上的http服务器


这是工作进程,而工作队列是如何避免启动和关闭新进程的开销的。

是的,我说的是
child\u process.spawn()。因为在我的场景中,生成的过程不会持续很长时间,所以这种情况永远不会发生。或者至少你证实了我的理解。谢谢你的建议和如何更有效地处理这样的问题。@MarvinH.-不知道什么是热身?子进程将具有与父进程相同的优化,但每次都从头开始重做,这有点低效。持久工作进程可能更高效。