什么是async lib中的函数mapLimit
?我认为Node使用内部线程池,一次限制异步操作的数量。更重要的是,我们在Node中有单线程,它使用事件循环(这意味着我们在该线程中一次执行一个操作)。有人能解释我们为什么需要它吗?
实际上,对于网络I / O节点,不使用线程池。它只使用一个线程:主线程。
所以是的,节点不能并行执行代码。
但节点可以等待并行发生的事情。这是异步/非阻塞I / O的本质,无论你使用node.js或C ++或Java还是go。
没有mapLimit
节点将立即发出所有请求(如果您正在处理一千次下载,那么节点将尽职尽责地尝试这样做)。这并不总是令人满意的,因为某些服务具有速率限制,并且您还会遇到请求超时问题。因此,mapLimit
允许您仅等待并行的有限数量的异步操作。
我终于找到了答案。这是我们在Node中处理堆栈操作的主要线程。
我们要避免的主要问题是RangeError: Maximum call stack size exceeded
。就是这样。
假设我们有很多异步操作,它们都会将一些结果返回给主线程(到主堆栈),以便在它们完成工作后进行操作。
主要的一点是,我们只需要以某种方式限制它们在堆栈中的数量。怎么样?只是一次限制异步操作的数量,因此在异步操作完成工作后我们不需要在主堆栈中处理很多操作。
重要的是要理解它并不能保证成功。因为即使我们的并发异步操作数量有限,但我们在主堆栈中的同步操作非常慢,我们的堆栈最终会爆炸,无论如何我们都会获得RangeError: Maximum call stack size exceeded
。