nodejs和Web浏览器中的单个线程是否相同?

时间:2018-09-09 11:42:51

标签: javascript node.js v8

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

如果是的话,是因为v8在工作中使用了该概念(chrome和node.js都使用v8)?

v8是这样设计的吗?

1 个答案:

答案 0 :(得分:4)

ECMA-262中指定的JS行为用“ Agent”定义了JS评估,它实际上是线程的抽象术语。所有主要浏览器的JS引擎都遵循此规范,显然Node.js使用与Chromium相同的引擎。

执行上下文堆栈(以简化术语表示)处理函数调用,作用域堆栈的范围仅限于代理程序,因此您不能真正在多线程环境中使用JS。

这就是Web Workers无法传递对象而使用structured clone的原因。

事件循环的概念也在ECMA-262中定义,其行为为RunJobs()Jobs and Job Queues。作业队列的作用域也仅限于代理,因此它们无法处理多线程环境。

当前是ECMA-262中定义的唯一使用作业队列的内容(承诺处理程序始终在新的滴答中运行),但是Node.js和浏览器大量使用IO的事件循环。