【发布时间】:2016-05-16 11:40:08
【问题描述】:
我正在使用 nodejs 执行 CPU 密集型任务,它基本上会生成大量数据并将其存储在文件中。我将数据流式传输到输出文件,因为它是为单一类型的数据生成的。
目标:我想完成为多种类型的数据并行生成这些数据的任务(充分利用我的多核 CPU)。没有每个进程都有自己的堆内存.从而提供更大的进程内存和更高的执行速度。
我计划使用节点fibers,meteor js 也使用它来处理自己的回调。但我不确定这是否能达到我想要的效果,就像在video on meteor fibers by Chris Mather 中提到的那样最终一切都是单线程的,节点纤程以某种方式管理相同的单线程事件循环以提供其功能。
所以,
这是否意味着如果我使用节点光纤,我将不会在其中运行我的任务 并行,因此不使用我的 cpu 内核?
节点webworker-threads 是否会帮助我实现 我想要的功能。正如模块主页上提到的那样 说,webworker 线程将在单独/并行 cpu 上运行 进程,从而提供真正意义上的多线程??
作为结束问题,这是否意味着 node.js 不适合 这样的 CPU 密集型任务?
注意:我不想使用以线程形式呈现的异步代码结构化库,但实际上只是在相同的异步代码上添加语法糖,因为这些任务主要是 CPU 密集型的。我已经使用了最大的异步功能.
// 更新 1(基于集群的答案)
对不起,我忘了提这个,但我遇到的集群问题是:
复杂的负载平衡我的工作量,以确保一组特定的并行任务在某些其他任务之前执行。
不确定集群是否真的做我想要的,参考these lines on webworker-threadsnpm主页
“无法阻止事件循环”问题是 Node 事件模型所固有的。无论您有多少节点进程作为节点集群运行,它都无法解决 CPU 密集型任务的问题。
.....任何关于如何......会有帮助的提示。
【问题讨论】:
标签: node.js multithreading meteor parallel-processing