如何限制或改进执行CPU密集型终端命令的节点脚本

问题描述

不确定如何问这个。我写了一个在计算机上运行的nodejs脚本,它调用了一些cpu密集型进程(sox和ffmpeg),其中有很多。直到某一点都没问题,但是一旦变得太重,事情就会开始崩溃。

我想知道如何改善这种情况?我是初学者,但是我已经尝试了一些方法。我尝试使用setTimeouts,但不确定是否确实有用,还是只是在脚本之上进行了更多工作。我还尝试过搜索关于nodejs中的反跳/限制的事情,但是我只发现与API请求有关的事情。

解决方法

除非同时具有数百个CPU内核,否则同时运行数百个CPU密集型进程(例如sox和ffmpeg)是没有意义的。为了给每个进程公平地分配CPU,这会导致过多的进程切换,而这又会带来自身的开销。

如果将进程数限制为内核数,则程序将更快地完成 并使系统更可用。例如,如果您有8个核心,则首先启动8个进程,然后在其中一个完成后立即启动下一个进程。