Web浏览器中的单线程,事件循环和回调的概念与node.js的概念相同?
如果是的话,是因为v8在工作中使用了该概念(chrome和node.js都使用v8)?
v8是这样设计的吗?
答案 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的事件循环。