【发布时间】:2020-02-07 05:22:03
【问题描述】:
我们都知道,在 Node.js 中,函数由工作线程处理执行,然后发送到事件队列,然后事件循环查看调用堆栈。 如果调用堆栈为空,则事件循环将函数的上下文环境调用堆栈,然后调用堆栈对其进行处理并将其作为响应。
我的问题是,如果我们有多个具有相同超时函数的函数,然后所有函数都交给工作线程,那么工作线程将它们的上下文环境发送到事件队列, 如果所有函数的超时时间相同,则它们都同时进入事件队列,如果调用堆栈为空,则事件循环将所有函数发送到调用堆栈,我们都知道的属性堆栈是 FILO。
所以如果发生这种情况导致最后一个函数应该首先发送响应,但如果所有超时都相同,第一个函数会首先响应?
【问题讨论】:
-
您的问题中有很多误解。 Node.js 是单线程的。所有函数都在同一个线程上运行。事件循环是 Node.js 如何使用一个线程来管理在不同时间调用多个函数的方式。 唯一 node.js 使用多个线程的事情是磁盘 I/O(网络 I/O 是单线程的)、DNS(因为 DNS 是阻塞的)和一些加密功能(因为加密使用 CPU 并且是不是真正的 I/O)
-
@DeepKakkar - 除了这个问题中的很多陈述都是错误的。这不是它的工作原理。
-
有关 node.js 工作原理的高级描述,请参阅:stackoverflow.com/questions/34855352/…
-
另外,你想达到什么目的或者这是一个哲学问题?
标签: node.js