Node.js async.parallel,它是平行的吗?

我知道节点依赖于单个事件线程。 所以没有办法让它有并行的线程。 但是async.parallel确实提供了类似并行的function。 Stack上的另一个问题意味着async.parallel正在使用process.nextTick。 所以基本上async.parallel是只是一个并发function,而不是一个真正的并行function?

async.parallel只是让你启动多个asynchronous操作,然后跟踪他们什么时候完成。 它们运行的​​并行程度完全取决于asynchronous操作是什么。 如果他们是networking操作,那么他们将可能是完全并行的,因为涉及的CPU非常less,并且处理获取数据进出node.js进程的CPU将在node.js单线程之外处理。

处理请求结果的自己的代码并不真正并行运行。 正如你所知,node.js是单线程的,所以你永远不会有多于一个你自己的Javascript实际上一次执行。 但是,诸如networking操作和磁盘操作等很多操作都是由单个Javascript线程之外的node.js处理的,以便可以并行完成工作。

如果你是例如将一系列同步函数传递给async.parallel比如Javascriptmath计算),那么没有什么可以并行完成。 它会运行一个完成,然后下一个等,因为只有一块Javascript一次运行。

async.parallel将用于Promise.all()将用于基于承诺的devise中的相同情况。 这是跟踪多个asynchronous操作的完成(或第一个错误)。

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

我知道节点依赖于单个事件线程。 所以没有办法让它有并行的线程。

在一个node.js进程中,只运行Javascript代码(没有本地代码),这是正确的。 当从本地代码实现的Javascript中调用函数时,线程或其他进程可以由node.js内部使用。

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

通常,asynchronouspipe理代码(即asynchronous库)使用process.nextTick()来强制callback,如果使用同步和asynchronous操作的混合,则始终asynchronous调用该callback以实现可预测的行为。 出于同样的原因,Promise规范要求.then()总是被调用到某个将来的tick上,而不是同步的,即使这个promise是立即解决的。

所以基本上async.parallel是只是一个并发function,而不是一个真正的并行function?

async.parallel是跟踪多个asynchronous操作的完成。 它本身不会使任何asynchronous。 传递给async.parallel的操作本身就是它本身(同步或asynchronous)的操作。 asynchronous库不会更改。