NodeJS:异步模块的并行性

时间:2013-03-26 10:27:47

标签: node.js async.js

我正在关注异步模块的每个方法(https://github.com/caolan/async#each)。它说该方法并行迭代数组。 “平行”这个词令我困惑。 AFAIK,现在JavaScript可以并行执行代码,因为它具有单线程模型。

每种方法中显示的示例都侧重于IO方案。我正在使用“each”方法来添加数组的数量。如果存在并行性,我可以使用我的例子证明这一点吗?

感谢阅读。

2 个答案:

答案 0 :(得分:3)

异步文档中的“并行”在并发性方面并不是指“并行”(就像多个进程或线程同时运行一样),但每个步骤的“并行”独立于其他步骤(相反的操作是eachSeries,其中每个步骤仅在前一步完成后运行。)

并行版本只有在步骤执行某种I / O时才有意义,因为Node(因为Node的异步性质)可以彼此并行运行:如果一步必须等待I / O,其他步骤可以愉快地继续发送/接收数据。

如果这些步骤主要是cpu绑定的(即执行大量计算),那么它不会为你提供更好的性能,因为就像你说的那样,Node在一个线程中运行解释器,而那不是async更改。

答案 1 :(得分:1)

像罗伯特肖普说的那样,它更多的是并发而不是并行。通过并行执行计算繁重的代码,您不会获得太多的性能提升。当您必须执行并行I / O(例如,与阵列的所有项目与外部Web服务通信)时,它非常有用。