【发布时间】:2016-12-18 23:15:35
【问题描述】:
我了解现代浏览器的 JS 引擎(如 V8、Spidermonkey、Chakra 等)在内部使用线程池,即使只有一个线程(运行事件循环)暴露给 JS 程序员。
显然,(很少使用)Web Worker 需要多个线程(或多个进程)——否则它们无法利用多个 CPU 内核。我的问题是,除了 Web Workers,用多线程实现 JS 引擎有什么好处?
为什么 JS 引擎不能通过内部依赖 JS 程序员使用的同一个事件循环来保持单线程,在需要执行任何 IO 时使用非阻塞 OS 调用?
澄清一下:即使用户只用一个选项卡打开一个窗口,JS 引擎也会使用线程池。
编辑:这是回答here
【问题讨论】:
-
一个浏览器同时查看多个网页?
-
@EdHeal 我编辑了我的问题以澄清。
-
@max 即使只有一个tab,浏览器UI也可能在另一个进程中使用JS。
-
@Oriol “在另一个进程中使用 JS”是什么意思?我问的是 JS 引擎本身,它不是用 JavaScript 编写的。浏览器执行的唯一 JS 代码是 HTML 页面内联或加载的脚本。所有代码都在单个线程中运行,但对并行执行的特殊支持除外,例如 Web Worker。
-
一个可能的用例是在不同的线程上运行 GC
标签: javascript asynchronous internals