asynchronous和并行处理

在这个问题上已经有不止一个post了,但是我仍然无法把这个问题弄得头晕目眩。

如果我不得不打电话给三个外部站点,Facebook,Twitter和Instagram,并且我使用asynchronous并行方式启动这三个站点,并且挂起等待Facebook响应的时间为20秒,但我不确定发生了什么。 这个电话是Twitter的开始和Instagram,他们都运行并可能在Facebook的调用之前完成,或者整个用户线程暂停,直到下一轮事件循环,另一个用户呼叫通过? 它看起来像后者给我们。 还是整个线程停下来等待?

根据请求,这里是代码的减less版本。 Service_requests是一组调用Facebook,Instagram和Twitter的函数。 还有一些其他的东西在这里,但它的肉很简单。

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); }); 

当你对服务进行并行请求时,它们都是“同时”发生的。 所以,如果Facebook花了20秒钟的时间返回,Twitter花了15秒,Instagram花了25秒,你将在25秒内收到所有的数据。

而且,当节点等待来自这些服务的响应时,它可以自由地服务于其他请求。

事件循环不会停下来等待响应,如果存在其他工作,则继续执行其他工作。

当所有3个服务都以数据响应时,asynchronous库将调用你的最终callback和结果。