Nodejs 中的单线程和 Web 浏览器中的单线程相同吗?

Bye*_*oon 3 javascript v8 node.js

Web 浏览器中的单线程、事件循环和回调的概念与 Node.js 相同?

如果是这样,是不是因为 v8 在工作中使用了这个概念(chrome 和 node.js 都使用 v8)?

v8就是这么设计的吗?

sne*_*nek 5

ECMA-262中 JS 的指定行为根据“代理”定义了 JS 评估,“代理”本质上是线程的抽象术语。所有主流浏览器的 JS 引擎都遵循这个规范,显然 Node.js 使用与 Chromium 相同的引擎。

执行上下文堆栈(简单来说)处理函数调用,其范围仅限于代理,因此您无法真正在多线程环境中使用 JS。

这就是为什么 Web Workers 不能传递对象,而是使用结构化克隆

ECMA-262 中也定义了事件循环的概念,具有RunJobs()以及作业和作业队列的组合行为。作业队列也仅限于代理,因此它们无法处理多线程环境。

目前,Promise 是 ECMA-262 中定义的唯一使用作业队列的东西(Promise 处理程序总是在新的刻度中运行),但 Node.js 和浏览器大量使用 IO 事件循环。