我正在关注异步模块的每个方法(https://github.com/caolan/async#each)。它说该方法并行迭代数组。“并行”是让我感到困惑的词。AFAIK,现在 JavaScript 可以并行执行代码,因为它具有单线程模型。
每个方法中显示的示例侧重于 IO 场景。我使用“每个”方法只是为了添加数组的数字。如果存在并行性,我可以用我的例子证明这一点吗?
谢谢阅读。
我正在关注异步模块的每个方法(https://github.com/caolan/async#each)。它说该方法并行迭代数组。“并行”是让我感到困惑的词。AFAIK,现在 JavaScript 可以并行执行代码,因为它具有单线程模型。
每个方法中显示的示例侧重于 IO 场景。我使用“每个”方法只是为了添加数组的数字。如果存在并行性,我可以用我的例子证明这一点吗?
谢谢阅读。
异步文档中的“并行”不是指并发方面的“并行”(例如同时运行多个进程或线程),而是指每个步骤独立于其他步骤的“并行”(相反的操作是eachSeries
,其中每个步骤仅在前一个步骤完成后运行)。
并行版本只有在步骤执行某种 I/O 时才有意义,这(由于 Node 的异步性质)可以彼此并行运行:如果一个步骤必须等待 I/O,其他步骤可以愉快地继续发送/接收数据。
如果这些步骤主要受 CPU 限制(即执行大量计算),那么它不会为您提供任何更好的性能,因为就像您说的那样,Node 在单个线程中运行解释器,这不会async
改变。
就像 robertklep 所说,它更多的是并发而不是并行。通过并行执行计算繁重的代码,您不会获得太多的性能提升。当您必须执行并行 I/O(例如,与外部 Web 服务为数组的所有项目通信)时,它很有用。