node.js - Node.js async.parallel,它是并行的吗?

标签 node.js asynchronous parallel-processing

我知道该节点依赖于单个事件线程。因此,它没有并行线程的方法。但是async.parallel确实提供了类似并行的功能。关于Stack的另一个问题意味着async.parallel正在使用process.nextTick。那么从本质上讲async.parallel只是一个并发函数,而不是真正的并行函数吗?

最佳答案

async.parallel仅允许您启动多个异步操作,然后跟踪它们何时完成。它们实际并行运行多少,完全取决于异步操作是什么。如果它们是网络操作,那么它们很可能是完全并行的,因为所涉及的CPU很少,并且用于处理将数据传入和传出Node.js进程的CPU将在node.js单线程之外处理。 。

您自己的用于处理请求结果的代码并非真正并行运行。如您所知,node.js是单线程的,因此您一次执行的Java脚本绝不会超过一个。但是,诸如network操作和磁盘操作之类的许多操作都是由单个Javascript线程之外的node.js处理的,因此可以并行完成工作。

例如,如果要将诸如Java数学计算之类的一系列同步函数传递给async.parallel,则并行执行任何操作。它将运行一个直到完成,然后运行下一个,依此类推,因为一次只能运行一个Javascript。

async.parallel将在与基于承诺的设计中使用Promise.all()的情况相同。它通过多个异步操作来跟踪完成(或第一个错误)。

node.js中同步操作的真正并行性通常是通过群集(多个相同的node.js进程共享负载)或自定义子进程(启动自定义子进程以运行某些特定操作)完成的,然后操作系统可以应用多个CPU到不同的过程并实现一些实际的并行性。


  我知道该节点依赖于单个事件线程。因此,它没有并行线程的方法。


在一个单个的node.js进程中,并且仅运行Javascript代码(无本地代码),这是正确的。当从以本机代码实现的Javascript调用函数时,node.js可能在内部使用线程或其他进程。


  关于Stack的另一个问题意味着async.parallel正在使用process.nextTick。


如果异步管理代码(使用异步和异步操作混合在一起),则通常使用process.nextTick()强制始终以异步方式调用回调以产生可预测的行为,这是常见的。出于同样的原因,Promise规范要求始终在将来的某个滴答中调用.then(),即使立即解决了承诺,也永远不要同步调用它。


  那么从本质上讲async.parallel只是一个并发函数,而不是真正的并行函数吗?


async.parallel的重点是跟踪多个异步操作的完成。它本身不会使任何事物异步。您传递给async.parallel的操作本身将是它本身的任何内容(同步或异步)。异步库不会改变这一点。

关于node.js - Node.js async.parallel,它是并行的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46397370/

相关文章:

c# - 在不阻塞的情况下上升事件并以正确的顺序接收事件

c - 数组元素看似任意变化[并行快速排序/前缀和]

c# - 任务并行库 - 如何立即返回但有一个并行步骤

javascript - 是否有使用 RxJS 的此可写流的功能更强大的实现,在处理之前等待 promise 解决?

javascript - 从 node.js 脚本中止 npm 构建脚本

c# - async/await WhenAll 在两个具有相同返回类型的方法上

c++ - std::async 可以与模板函数一起使用吗

wolfram-mathematica - 在 Mathematica 中并行运行多少个内核?

node.js - sails.js(使用 node.js 和 express.js)的标题或应用名称在哪里?

node.js - 如何使用 pg-promise 在没有密码的情况下连接到 Postgres 数据库?