【问题标题】:How to I throttle or improve a node script that executes CPU intensive terminal commands如何限制或改进执行 CPU 密集型终端命令的节点脚本
【发布时间】:2020-12-02 09:58:47
【问题描述】:

不知道怎么问。我编写了一个在我的计算机上运行的 nodejs 脚本,它调用了一些 CPU 密集型进程(sox 和 ffmpeg)以及其中的许多进程。直到某一点为止一切都很好,但是一旦它变得太重,事情就会开始崩溃。

我想知道如何改进这样的事情?我是初学者,但我尝试了一些东西。我曾尝试使用setTimeouts,但我不确定这是否真的有帮助,或者它是否只是在我的脚本之上增加了更多的工作。我也尝试过在 nodejs 中搜索有关去抖动/节流的内容,但我只找到与 API 请求相关的内容。

【问题讨论】:

  • 你知道减速的原因吗?在 Unix 系统上,尝试top。这可能是过多的进程切换,但只有当您的进程比 CPU 内核多得多(数百或数千个进程)时,这才会成为问题。这将通过top 中的高负载来表示。它也可能是内存压力,导致交换。您可以在 top 中将其识别为较高的 wa 百分比(wa = I/O 等待,这通常表示交换)。
  • 非常感谢。我在 for 循环中启动了数百个进程(实际上是 sox/ffmpeg 终端命令),所以可能就是这样。我需要在哪里输入top 或者它到底是什么?抱歉,不知道要查找什么:)
  • top 是 Unix 系统上的命令行程序(在任何 Linux 上可用,也可能在 macOS 上可用),它显示正在运行的进程以及它们的 CPU 使用率和内存使用率。您可以通过键入 top 并按 Enter 从终端运行它。您可以使用Shift+M 按内存使用情况排序,然后使用q 键退出。

标签: javascript node.js cpu throttling sox


【解决方案1】:

除非您拥有数百个 CPU 内核,否则同时运行数百个 CPU 密集型进程(如 sox 和 ffmpeg)毫无意义。为了给每个进程公平的 CPU 份额,这会导致过多的进程切换,这会带来自己的开销。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-28
    • 2011-04-13
    • 2016-01-09
    • 2017-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-25
    相关资源
    最近更新 更多