NodeJS批量多线程处理 - 使用池中的子进程。
我知道子进程是一个进程,而不是一个线程。我使用了错误的语义,因为大多数人在讨论“多线程”时知道你的意图。因此,我将保留这个术语在标题中。
想象一下一个场景,您需要使用单个自定义函数或模块连续地完成多个类似且复杂的任务。在这种情况下,最好使用所有可用的CPU内核/线程(例如8/16),这就是child_process.fork()
的作用。
理想情况下,您希望有多个同时运行的工作进程,并向/from一个控制器发送/回调消息。
node-cpool、fork-pool、child-pool等模块正是做到这点,但它们看起来已经过时/未维护/不受欢迎。
虽然有很多类似的模块,但它们似乎最相关。它们共同之处就是只有几个提交记录,很少被赞和fork,并且已经被弃用。
通常情况下,当我找不到一个看起来在各个方面都很有意义的任务时,是因为我错过了更好的方法。因此,我的问题是:
如何为我的自定义模块创建一个受管理、排队、多线程并行fork()
池?
像TAGG和webworker-threads这样的多线程模块并不相同,因为它们不支持完整的模块(带有二进制编译组件)。
PS
我目前正在使用 fork-pool 这个模块,它似乎完全符合我的要求,但有些小问题。我不相信这样一个鲜为人知、不太受欢迎的模块是唯一可行的选择。
child_process.fork()
创建的是一个进程而不是一个线程。为每个 CPU 密集型任务创建一个进程似乎并不正确。[tag:node.js](在没有第三方本地模块的帮助下)为 IO 密集型应用程序提供了单线程环境。您可以编写一个多语言应用程序,并使用 [tag:message-queue] 将 CPU 密集型任务卸载到多线程环境中。 - fardjadfork()
会创建一个进程。事实上,_进程__和__线程__都可以在硬件通道的一个"每个核心线程"_中独立执行代码。就这个问题而言,请假设我知道自己在做什么,并且运行8个进程是可以的。我从来没有听说过有人抱怨软件运行速度加倍。Node提供了一个多线程工具集,即child_process,专门为需要它的人提供服务。 - Redsandro