我通过使用节点子进程模块分支进程来卸载Express请求 - 响应周期中的一些处理。我在Express中间件中基本上有以下代码:
forkedProcess = child.fork(scriptFile);
forkedProcess.send(messageToChild);
forkedProcess.on('message',function(messageFromChild) {...});
然后在孩子的过程中,我有:
process.on('message', function(messageFromParent) {....});
process.send('messageToParent);
process.exit(0);
在测试时,我决定插入一些虚拟语句以保持子进程长时间运行,以便我可以在临时中向父进程发送另一个请求。问题是第二个请求需要很长时间才能响应。请求处理程序本身在第二个请求上没有启动几秒钟。
我无法理解为什么?子进程不应该阻塞父主事件循环,显然不会因为第二个请求在第一个请求的子进程退出之前得到处理但是需要很长时间。如果我从子进程中获取伪语句,则请求 - 响应循环正常工作。我模拟了测试用例,因为子分叉进程是基于一些开发人员脚本动态生成的。这些开发人员脚本不应该减慢主循环......显然它确实如此。为什么?
答案 0 :(得分:1)
考虑到分支流程本身的时间/内存成本,分析每个请求并不是一个好主意。理想情况下,您应该在启动时分叉所需的进程,并在需要时发送/接收消息。 希望这有帮助