javascript - nodejs和web浏览器中的单线程是否相同?

标签 javascript node.js v8

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/

相关文章:

javascript - 使用 JavaScript、JQuery 从网页中抓取评论

node.js - 安装(回滚)到旧的 socket.IO 版本

javascript - node.js 是 Perl 和 Python 等传统脚本语言的可行替代方案吗?

node.js - Node 中的异步函数仅在发送响应后运行

javascript - 如何在 V8 Javascript 引擎中公开一个 C++ 类,以便可以使用 new 创建它?

JavaScript 对象代码缓存 : which of these assertions are wrong?

javascript - 点击添加模板

javascript - 将 Javascript 数组匹配到 Java 列表

javascript - 如何将复选框值导出到 csv 文件?

node.js - NodeJS : Need idiomatic: Read files in dir, 连接、转换、写入