首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是并行执行的(显式和隐式),什么是在node.js中顺序执行的?

什么是并行执行的(显式和隐式),什么是在node.js中顺序执行的?
EN

Stack Overflow用户
提问于 2012-11-23 21:15:16
回答 1查看 266关注 0票数 2

这个例子混淆了我对node.js工作原理的理解:

代码语言:javascript
复制
// 1.
numbers.forEach(function(number) {
  queue.push(Q.call(slowFunction, this, number));
});

// 2.
// Q.all: execute an array of 'promises' and 'then' call either a resolve 
// callback (fulfilled promises) or reject callback (rejected promises)
Q.all(queue).then(function(ful) {

  // All the results from Q.all are on the argument as an array
  console.log('fulfilled', ful);
}, function(rej) {

  // The first rejected (error thrown) will be here only
  console.log('rejected', rej);
}).fail(function(err) {

  // If something went wrong, then we catch it here, usually when there is no
  // rejected callback.
  console.log('fail', err);
}).fin(function() {

  // Finally statement; executed no matter of the above results
  console.log('finally');
});

为什么这里假设代码的1.2.部分将按顺序执行?那么,Q.all(queue)1.中推送的所有queue元素上工作的保证在哪里呢?1.numbers如此之大,以至于它与2.并行不悖,这是不是真的?这些想法来自于这样一种理解,即node.js将首先使用node.js event-loop处理1.2.,然后将其提供给workers,这实际上类似于普通线程。

那么问题是:1.2.是并行执行,还是从node.js event-loop开始顺序执行( 1.会推入队列中的所有元素,只有在这之后2.才开始处理queue中的每个元素)?请提供参数,并提供一些指向此主题文档的直接链接。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-23 08:02:54

在最顶层,1.和2的Q.all(queue).then(...).fail(...).fin(...);方法链将明确地按顺序执行。

在1和2中定义/调用的函数的精确执行时间在很大程度上取决于slowFunction的性质。

  • 如果slowFunction完全由同步javascript执行(例如,一些扩展数学),那么1将在2开始之前完成它的全部。在这种情况下,在2中指定的回调将在2的方法链完成执行后不久执行,因为由slowfunction返回的任何promises都将(或至少应该)已经被解析。
  • 如果slowFunction涉及一个或多个异步节点I/O进程(例如.文件处理或资源获取),那么对它的每个调用都将(至少部分地)由一个非阻塞工作线程(不是javascript)承担;在这种情况下,如果slowFunction被正确编写,queue将累积一组promises,每个promises稍后将被解析或拒绝。在2中指定的回调将在2的方法链完成执行以及所有承诺都已解决或被拒绝时执行。

对我来说,2的介绍文本的重新表述版本将在很长一段时间内解释执行顺序:

promise:等待的queue数组中的每个“promise”都被解析或拒绝“then”调用相应的回调函数。

参考:http://rickgaribay.net/archive/2012/01/28/node-is-not-single-threaded.aspx

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

https://stackoverflow.com/questions/13529903

复制
相关文章

相似问题

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