当堆栈上还有事情要做时,Javascript如何将新消息排队

当堆栈上还有事情要做时,Javascript如何将新消息排队,javascript,node.js,Javascript,Node.js,Javascript据说是单线程的。假设堆栈上当前有一些CPU密集型函数: function calculatePi(decimalPlaces) { // Currently there is calatePi(10000000) on the stack, // which computes for 10 seconds. } 现在,一些其他事件到达,例如用户单击按钮或HTTP响应可用,这将导致在消息队列中使用相关回调将新消息排队 当堆栈上还有事情要做时,Javascript引擎

Javascript据说是单线程的。假设堆栈上当前有一些CPU密集型函数:

function calculatePi(decimalPlaces) {
  // Currently there is calatePi(10000000) on the stack, 
  // which computes for 10 seconds.
}
现在,一些其他事件到达,例如用户单击按钮或HTTP响应可用,这将导致在消息队列中使用相关回调将新消息排队

当堆栈上还有事情要做时,Javascript引擎如何将此消息排入消息队列


如果它能做到这一点,这将意味着发动机不是单线程的。如果不能这样做,第二个事件将丢失。

JavaScript代码在事件循环中按顺序执行(就像在单个线程上)


没有人说过管理事件队列的引擎必须是单线程的。

JavaScript代码在事件循环中按顺序执行(就像在单线程上)


没有人说过管理事件队列的引擎必须是单线程的。

“Javascript被认为是单线程的”,不知道他们在说什么的人都这么说。当然,引擎不是单线程的,但只有一个线程运行Javascript。“Javascript被认为是单线程的”当然,引擎不是单线程的,但是只有一个线程运行javascript…即使这样,也可以在一个线程中同时执行多个任务,没有什么可以阻止引擎在有其他事情要做时停止JS执行…即使这样,在一个线程中可以同时执行多个任务,当有其他事情要做时,没有什么可以阻止引擎停止JS执行。