Red*_*dro 8 multithreading fork child-process node.js
我知道子进程是一个进程,而不是一个线程.我使用了错误的语义,因为当你谈到"多线程"时,大多数人都知道你的意图.所以我会把它保留在标题中.
想象一下,您可以使用单个自定义函数或模块连续执行多个类似且复杂的操作.使用所有可用的核心/线程(例如8/16)是很有意义的,这child_process.fork()就是用途.
理想情况下,您将需要多个同时工作者以及向/从一个控制器发送/回调消息.
node-cpool,fork-pool,child-pool是一些正是这样做的模块,但它们看起来很旧/没有维护/不受欢迎.
有大量类似的模块,但这些模块似乎最相关.它们的共同点是几个提交,几乎不加星标,几乎没有分叉和被遗弃.
通常情况下,当我找不到任何看似有意义的任务的东西时,通常情况就是有一种更好的方式让我失踪.因此我的问题.
如何管理,排队, 多线程fork()我的自定义模块的并行s 池,它可以执行一些CPU密集型工作吗?
像TAGG和webworker-threads这样的多线程模块并不相同,因为它们不支持完整模块(使用二进制编译组件).
PS
我现在正在使用fork-pool,这似乎完全符合我的要求,有一些怪癖,但我无法相信这样一个未知和不受欢迎的模块将是唯一可行的选择.
我想提供一个选项,它不能完全回答您的问题,但在与您类似的情况下,当可以灵活选择技术时,可能会很有用。
如果可以接受将工作卸载到 .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 的依赖可能就有点矫枉过正了。然而,有很多任务可能是有价值的。成为一名优秀的工程师需要一些思考。