Web 浏览器中的单线程和事件循环和回调的概念与 node.js 相同??
如果是这样,是不是因为 v8 在工作中使用了这个概念(chrome 和 node.js 都使用 v8)?
v8 是这样设计的吗?
最佳答案
ECMA-262中JS的指定行为根据“Agent”定义 JS 评估,这本质上是线程的抽象术语。所有主流浏览器的 JS 引擎都遵循这个规范,显然 Node.js 使用与 Chromium 相同的引擎。
执行上下文堆栈(简单来说)处理函数调用,作用域为代理,因此您无法在多线程环境中真正使用 JS。
这就是为什么 Web Worker 不能传递对象,而是使用 structured clone 的原因
ECMA-262 中也定义了事件循环的概念,结合了RunJobs() 的行为。和 Jobs and Job Queues .作业队列的范围也仅限于代理,因此它们无法处理多线程环境。
Promises 目前是 ECMA-262 中定义的唯一使用作业队列的东西(Promise 处理程序总是在新的 tick 中运行),但是 Node.js 和浏览器大量使用事件循环来处理 IO。
关于javascript - nodejs和web浏览器中的单线程是否相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52244186/