首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异步并行处理

异步并行处理
EN

Stack Overflow用户
提问于 2013-09-30 23:44:25
回答 1查看 78关注 0票数 1

关于这个问题已经有很多帖子了,但是我还是不能把我的头放在这个特定的问题上。

如果我必须调用三个外部站点,Facebook、Twitter和Instagram,然后以异步并行方式启动这三个站点,它会挂断20秒等待Facebook的响应,我不知道会发生什么。调用Twitter和Instagram,它们都运行并且可能在调用Facebook之前完成吗?还是整个用户线程会暂停到下一轮事件循环,而另一个用户会调用它呢?在我们看来是后者。还是整个线程都会停下来等待?

根据请求,下面是代码的精简版本。Service_requests是一系列调用Facebook、Instagram和Twitter的函数。这里也有很多其他的东西,但是它的肉很简单。

代码语言:javascript
复制
 Async.parallel(service_requests, function (err, results)
 {
      if (err) { next(err); return; }

      var articles = [];

      for (var i = 0; i < results.length; i++)
      {
           articles = articles.concat(results[i]);
      }

      next(null, articles);
 });
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-01 06:33:41

当您向服务发出并行请求时,它们都是“同时”发生的。所以,如果facebook花了20秒的时间返回,twitter花了15秒,instagram花了25秒,那么当你提出所有的请求时,你会在25秒内得到你所有的数据。

此外,当节点等待这些服务的响应时,它可以免费为其他请求提供服务。

事件循环不会停止并等待响应,如果存在其他工作,它将继续执行其他工作。

当所有3个服务都使用数据进行响应时,异步库将使用结果调用最后的回调。

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

https://stackoverflow.com/questions/19105683

复制
相关文章

相似问题

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