我了解到应该将 CPU 密集型任务从服务器中移出,服务器应该负责与客户端通信并快速响应,而不是真正用于发送批量电子邮件,或者以特定质量计算数据库中的用户或调整图像大小等。
所以没有这样做我怎么能让我的 nodejs 保持联系并控制 nodejs 代码之外的进程。
例如,
用户上传一百万行的大 csv 文件。
我想分析一下然后返回
我可以让用户等待 nodejs 分析并返回结果。
有效但无法扩展,如果有 3000 个用户,事件循环的所有优势都将消失。
那么我该如何处理呢。
我读到我应该让其他外部进程来处理这个,怎么办?这些过程可以用更好更快的语言编写吗?如果我想将进度流式传输到客户端 (30%) 怎么办,这将需要进程和 nodejs 之间的通信。
如果我能解决这个问题,我认为 GO 和 Nodejs 是最好的组合。
最佳答案
在 Node 中,如果你需要执行 CPU 密集型工作,你应该使用 child_process
.这将使主要流程保持空闲,以便在分析您的 CSV 时继续处理请求和响应客户。
当然,对于 3000 个用户,您不希望生成 3000 个单独的进程,因为这不会扩展,因此在构建 Node 应用程序时,设计如何控制/创建您的子进程应该是所有考虑因素。
如果您想报告进度,您可以使用父进程和子进程之间的消息来通过 child.send()
传达 CSV 分析的状态。 (父对子通信)和 process.send()
(子对父通信)。 See this example来自用于在父进程和子进程之间进行通信的 Node 文档。
关于node.js - 如何构建 Node 应用程序来处理 cpu 密集型任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37623924/