首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Async.js --并行真的是并行的吗?

Async.js --并行真的是并行的吗?
EN

Stack Overflow用户
提问于 2013-09-26 09:11:35
回答 5查看 6.2K关注 0票数 15

正如我目前所理解的: Javascript是单线程的。如果您推迟了某个过程的执行,您只需将它(队列)安排在下次线程空闲时运行。但是Async.js定义了两个方法:Async::parallel & Async::parallelLimit,我引用如下:

  • 并行(任务、回调)

并行运行一个函数数组,而不等待上一个函数完成。如果任何函数将错误传递给其回调..。

  • parallelLimit(任务、限制、回调)

与并行任务一样,只并行执行任务,在任何时候执行的任务最多都是“限制”任务。

就我对英语的理解而言,当你说:“并行做任务”意味着同时做--同时做。

Async.js如何在单个线程中并行执行任务?我是不是漏掉了什么。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-09-26 09:53:24

Async.js如何在单个线程中并行执行任务?我是不是漏掉了什么。

parallel同时运行它的所有任务。因此,如果您的任务包含I/O调用(例如查询DB),它们将显示为并行处理。

这是如何在一个线程中启用的?!这就是我无法理解的。

Node.js是非阻塞的.因此,它不是并行地处理所有任务,而是从一个任务切换到另一个任务。因此,当第一个任务使I/O调用处于空闲状态时,Node.js只需切换到处理另一个任务。

I/O任务将其大部分处理时间用于等待I/O调用的结果。在像Java这样的阻塞语言中,这样一个任务在等待结果时阻塞它的线程。但是Node.js利用它来处理另一个任务,而不是等待。

这意味着,如果每个任务的内部处理都是异步的,那么线程将被授予该任务的每个位,而不管它们中是否有人已经完成,还是直到所有任务都完成了它们的位呢?

是的,就像你说的那样。Node.js开始处理第一个任务,直到暂停执行I/O调用为止。这时,Node.js离开它,将它的主线程分配给另一个任务。因此,您可以说,线程依次授予每个活动任务。

票数 14
EN

Stack Overflow用户

发布于 2015-08-10 18:21:33

Async.Parallel在这里有很好的文档:https://github.com/caolan/async#parallel

Async.Parallel是关于并行启动I/O任务,而不是并行执行代码。如果您的任务不使用任何计时器或执行任何I/O,它们实际上将被串联执行。每个任务的任何同步设置部分都将一个接一个地发生。JavaScript仍然是单线程的.

票数 4
EN

Stack Overflow用户

发布于 2013-09-26 09:49:35

函数不是同时执行的,但是当第一个函数传递给异步任务(例如setTimeout、network、.)时,即使第一个函数没有调用提供的回调,第二个函数也会启动。

至于并行任务的数量:这取决于您选择什么。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19023977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档