-1

我想处理长度约为 100 000 的数组,而不会给 CPU 带来太多负载。我研究了流并偶然发现了 highlandjs,但我无法使其工作。

我也尝试过使用承诺和分块处理,但它仍然给 CPU 带来了很大的负载,如果需要,程序可能会很慢,但不应该给 CPU 带来负载

4

1 回答 1

1

使用将 Javascript 作为单线程运行的 node.js,如果您希望服务器最大程度地响应传入请求,那么您需要从主 http 服务器进程中删除任何 CPU 密集型代码。这意味着在其他一些进程中执行 CPU 密集型工作。

有很多不同的方法可以做到这一点:

  1. 使用该child_process模块启动另一个专门为执行 CPU 密集型工作而构建的 nodejs 应用程序。
  2. 集群您的应用程序,以便您拥有 N 个不同的进程,可以同时执行 CPU 密集型工作和处理请求。
  3. 创建一个工作队列和一些将处理 CPU 密集型工作的工作进程。
  4. 使用较新的工作线程将 CPU 密集型工作转移到单独的 node.js 线程(需要 node v12+ 以获得稳定的、非实验版本的线程)。

如果您不经常进行这种 CPU 密集型工作,那么 #1 可能是最简单的。

如果您出于其他原因需要扩展(例如处理大量传入请求)并且您不经常执行 CPU 密集型工作 #2。

如果您经常执行 CPU 密集型工作,并且您希望传入的请求处理始终具有最高优先级,并且您愿意让 CPU 密集型工作花费更长的时间,那么 #3(工作队列)或 #4(线程)是可能是最好的,你可以调整工人的数量来优化你的结果。

于 2019-07-07T04:41:47.080 回答