Node.js中的并行任务
我有一些我想在JS中做的资源密集型任务。对于这个问题,让我们假设它们是一些繁重的计算,而不是系统访问。现在,我想同时运行任务A,B和C,并在完成后执行一些功能D。
该异步库为此提供了一个很好的脚手架:
async.parallel([A, B, C], D);
如果我正在做的只是计算,那么它将仍然同步运行(除非库将任务本身放在不同的线程上,我希望情况并非如此)。我如何使它实际上是平行的?异步代码通常不阻止调用者的事情是什么(使用NodeJS时)?是否开始子进程?
回答:
首先,在单节点应用程序中您实际上不会并行运行。节点应用程序在单个线程上运行,并且节点的事件循环一次仅处理一个事件。即使在多核计算机上运行,您也不会在节点应用程序中获得并行处理。
也就是说,您可以通过将代码分叉到单独的节点进程中或通过生成子进程来在多核计算机上实现并行处理。实际上,这允许您创建节点本身的多个实例,并以不同的方式(例如,stdout,进程派生IPC机制)与这些进程进行通信。此外,您可以选择将功能(按职责)分离到各自的节点应用程序/服务器中,并通过RPC进行调用。
它没有开始新的过程。在下面,当在node.js中使用async.parallel时,它正在使用process.nextTick()
。并且nextTick()允许您通过将工作推迟到新的堆栈上来避免阻塞调用者,从而可以交织cpu密集型任务等。
节点无法轻松实现“开箱即用”的多处理器并发。相反,Node为您提供了非阻塞设计和事件循环,该事件循环利用线程而不共享内存。多个线程不能共享数据/内存,因此不需要锁。节点是无
。一个节点进程利用一个线程,这使节点既安全又强大。
例如IPC / RPC。
有关更多信息,请参见:
SO关于什么是Node.js给出了很棒的答案…很好。
了解process.nextTick()
以上是 Node.js中的并行任务 的全部内容, 来源链接: utcz.com/qa/413769.html