NodeJS批处理多处理 - 池中的子进程(或多线程)

Red*_*dro 8 multithreading fork child-process node.js

NodeJS批量多 穿线 处理 - 池中的子进程.

我知道子进程是一个进程,而不是一个线程.我使用了错误的语义,因为当你谈到"多线程"时,大多数人都知道你的意图.所以我会把它保留在标题中.


想象一下,您可以使用单个自定义函数或模块连续执行多个类似且复杂的操作.使用所有可用的核心/线程(例如8/16)是很有意义的,这child_process.fork()就是用途.

理想情况下,您将需要多个同时工作者以及向/从一个控制器发送/回调消息.

node-cpool,fork-pool,child-pool是一些正是这样做的模块,但它们看起来很旧/没有维护/不受欢迎.

有大量类似的模块,但这些模块似乎最相关.它们的共同点是几个提交,几乎不加星标,几乎没有分叉和被遗弃.

通常情况下,当我找不到任何看似有意义的任务的东西时,通常情况就是有一种更好的方式让我失踪.因此我的问题.

如何管理,排队, 多线程fork()我的自定义模块的并行s 池,它可以执行一些CPU密集型工作吗?

TAGGwebworker-threads这样的多线程模块并不相同,因为它们不支持完整模块(使用二进制编译组件).


PS

我现在正在使用fork-pool,这似乎完全符合我的要求,有一些怪癖,但我无法相信这样一个未知和不受欢迎的模块将是唯一可行的选择.

Rom*_*iko 1

我想提供一个选项,它不能完全回答您的问题,但在与您类似的情况下,当可以灵活选择技术时,可能会很有用。

如果可以接受将工作卸载到 .NET 环境(C#、F#、IronPython、PowerShell 等),那么您可能会对Edge.js项目感兴趣。

通过这种方式,您可以使用 Node 进行 IO 密集型工作,并将计算密集型工作委托给托管在同一进程内的 .NET 运行时。Edge.js 提供与 .NET 代码的高效互操作性,允许利用 .NET 任务并行库和其他功能,而无需产生额外进程的开销。


每当您制作混合应用程序时,都会涉及维护和技术成本。根据项目的优先级,仔细评估您的收益并确保其值得付出的成本。

Node.js 不太适合执行阻塞、CPU 密集型工作负载。Node.js 的显着设计特征是其单线程、基于事件循环的架构。

Node.js 应用程序通常通过将处理委托给外部进程或服务来处理 CPU 密集型工作负载。这涉及跨越进程边界并产生额外的延迟。(更多的

在没有充分理由的情况下引入复杂性是愚蠢的。如果 Node.js 本身可以处理该任务,那么添加对 .NET 的依赖可能就有点矫枉过正了。然而,有很多任务可能是有价值的。成为一名优秀的工程师需要一些思考。

  • 这实在是太过分了。建议使用 .NET 作为使用某种队列的替代方案是愚蠢的,特别是因为您仍然需要队列来将消息传递到 .NET 或从 .NET 传递消息。此外,它们可能在 OSX 或 Linux 上运行,这使得 .NET 成为更糟糕的建议。 (3认同)
  • “愚蠢”是温和的说法。就像引入 Java (JVM) 或 Haskell 是荒谬的,除非它们提供了 NodeJS 本身无法做到的东西。即便如此,如果 Java 或 Haskell 提供更好的工具,我还是建议用 Java 或 Haskell 编写解决方案,而不是将两个平台融合在一起。 (2认同)