我正在构建一个简单的应用程序来下载一组XML文件,并使用异步模块(https://npmjs.org/package/node-async)将它们解析到数据库中以进行流控制。总体流程如下:
实际上,对于每个数据集,都有一个父进程(2),它包含一系列异步子进程(3,4,5)。我面临的挑战是,因为在特定进程的所有子进程完成之前有很多父进程触发,所以子进程似乎在事件循环中排队,并且所有进程都需要很长时间。特定父进程的子进程,以解决并允许垃圾收集来清理所有内容。结果是,即使程序似乎没有任何内存泄漏,内存使用率仍然太高,最终导致程序崩溃。
一个有效的解决方案是使一些子进程同步,以便它们可以在事件循环中组合在一起。但是,我还看到了这里讨论的替代解决方案:https://groups.google.com/forum/#!topic/nodejs/Xp4htMTfvYY,它将父进程推送到队列中,并且只允许一次运行某个数字。我的问题是,是否有人知道一个更强大的模块来处理这种类型的排队,或任何其他可行的替代方案来处理这种流量控制。我一直在寻找,但到目前为止还没有运气。
感谢。
答案 0 :(得分:1)
我决定发布这个答案:
不要立即启动所有流程。让一个请求的回调启动下一个请求。整体工作仍然是异步的,但每个请求都是串行运行的。然后,您可以将一定数量的连接汇集在一起以同时运行,以最大化I / O吞吐量。查看async.eachLimit并用它替换每个async.each示例。
您的async.parallel调用也可能导致问题。