mapLimit有什么意义?

问题描述 投票:0回答:2

什么是async lib中的函数mapLimit?我认为Node使用内部线程池,一次限制异步操作​​的数量。更重要的是,我们在Node中有单线程,它使用事件循环(这意味着我们在该线程中一次执行一个操作)。有人能解释我们为什么需要它吗?

node.js async.js
2个回答
2
投票

实际上,对于网络I / O节点,不使用线程池。它只使用一个线程:主线程。

所以是的,节点不能并行执行代码。

但节点可以等待并行发生的事情。这是异步/非阻塞I / O的本质,无论你使用node.js或C ++或Java还是go。

没有mapLimit节点将立即发出所有请求(如果您正在处理一千次下载,那么节点将尽职尽责地尝试这样做)。这并不总是令人满意的,因为某些服务具有速率限制,并且您还会遇到请求超时问题。因此,mapLimit允许您仅等待并行的有限数量的异步操作。


0
投票

我终于找到了答案。这是我们在Node中处理堆栈操作的主要线程。

我们要避免的主要问题是RangeError: Maximum call stack size exceeded。就是这样。

假设我们有很多异步操作,它们都会将一些结果返回给主线程(到主堆栈),以便在它们完成工作后进行操作。

主要的一点是,我们只需要以某种方式限制它们在堆栈中的数量。怎么样?只是一次限制异步操作​​的数量,因此在异步操作完成工作后我们不需要在主堆栈中处理很多操作。

重要的是要理解它并不能保证成功。因为即使我们的并发异步操作数量有限,但我们在主堆栈中的同步操作非常慢,我们的堆栈最终会爆炸,无论如何我们都会获得RangeError: Maximum call stack size exceeded

© www.soinside.com 2019 - 2024. All rights reserved.