Node.js 什么';地图的极限是多少?

Node.js 什么';地图的极限是多少?,node.js,async.js,Node.js,Async.js,异步库中函数mapLimit的作用点是什么?我认为该节点使用内部线程池来限制一次异步操作的数量。此外,节点中只有一个线程,它使用事件循环(这意味着我们在该线程中一次执行一个操作)。有人能解释一下我们为什么需要它吗?实际上,因为网络I/O节点不使用线程池。它只使用一个线程:主线程 所以,是的,节点不能并行执行代码 但是node可以等待事情并行发生。这是异步/非阻塞I/O的本质,不管您使用NoDE.JS或C++或java还是GO。 如果没有mapLimit,node将一次发出所有请求(如果您正在处理

异步库中函数
mapLimit
的作用点是什么?我认为该节点使用内部线程池来限制一次异步操作的数量。此外,节点中只有一个线程,它使用事件循环(这意味着我们在该线程中一次执行一个操作)。有人能解释一下我们为什么需要它吗?

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

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

但是node可以等待事情并行发生。这是异步/非阻塞I/O的本质,不管您使用NoDE.JS或C++或java还是GO。
如果没有
mapLimit
,node将一次发出所有请求(如果您正在处理1000次下载,那么node将尽职尽责地尝试这样做)。这并不总是可取的,因为某些服务有速率限制,而且您将遇到请求超时问题。因此,
mapLimit
只允许您并行地等待有限数量的异步操作。

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

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

但是node可以等待事情并行发生。这是异步/非阻塞I/O的本质,不管您使用NoDE.JS或C++或java还是GO。
如果没有
mapLimit
,node将一次发出所有请求(如果您正在处理1000次下载,那么node将尽职尽责地尝试这样做)。这并不总是可取的,因为某些服务有速率限制,而且您将遇到请求超时问题。因此,
mapLimit
只允许您并行地等待有限数量的异步操作。

我终于找到了答案。这都是关于节点中处理操作堆栈的主线程

我们要避免的主要问题是
范围错误:超过了最大调用堆栈大小
。就这样

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

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


重要的是要明白这并不能保证成功。因为即使我们有有限数量的并发异步操作,但我们在主堆栈中的同步操作非常慢,我们的堆栈最终也会爆炸,我们会得到
RangeError:无论如何都超过了最大调用堆栈大小。

我终于找到了答案。这都是关于节点中处理操作堆栈的主线程

我们要避免的主要问题是
范围错误:超过了最大调用堆栈大小
。就这样

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

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


重要的是要明白这并不能保证成功。因为即使我们有有限数量的并发异步操作,但我们在主堆栈中的同步操作非常慢,我们的堆栈最终也会爆炸,我们会得到
RangeError:无论如何都超过了最大调用堆栈大小。

值得一提的是,node没有并行代码执行(没有线程,除非您使用的是工作线程),但它确实有并行等待(通过回调实现)像往常一样,对于我这样的回答,您可能会对我对其他相关问题的回答感兴趣,以了解这一切是如何工作的:我了解了速率限制和请求超时问题的要点,但实际上正如这里提到的,节点使用内部线程池进行文件系统操作。我不确定网络,您能否提供证据证明ode使用线程池以外的机制来处理网络中的块操作?@GuseynIsmayylov幸运的是上周有人问了同样的问题,所以我仍然有链接。Nodejs文档:向下滚动到“Node快速回顾”部分来查看哪些代码在主线程上运行,哪些在独立线程上运行。我花了一段时间才找到它。我最初的答案是我阅读了node.js源代码,你也可以在github上执行同样的操作,但如果你相信这些文档,它就足以满足高级别的需求description@GuseynIsmayylov另外,磁盘I/O也不需要线程e是s语言Tcl,它在主线程上进行异步磁盘I/O。但跨平台兼容性是一场噩梦(linux、BSD、Win9x、Win2k/NT/XP、Mac、MacOSX、Solaris等,node甚至不支持Tcl支持的所有功能)。在单独的线程中进行磁盘I/O的主要原因是避免需要维护跨平台异步代码(它们都有不同于libpthread的API)值得一提的是,node没有并行代码执行(除非使用工作线程,否则没有线程),但它有并行等待(通过回调实现)像往常一样,对于我这样的回答,您可能会对我对其他相关问题的回答感兴趣,以了解这一切是如何工作的:我了解了速率限制和请求超时问题的要点,但实际上正如这里提到的,节点使用内部线程池进行文件系统操作。我不确定网络,您能否提供证据证明ode使用线程池以外的机制处理网络中的块操作?@GuseynIsmayylov