为什么现代浏览器JS引擎是多线程的?

时间:2016-12-18 23:15:36

标签: javascript asynchronous internals

我理解现代浏览器' JS工程(如V8,Spidermonkey,Chakra等)在内部使用线程池,即使只有一个线程(运行事件循环)暴露给JS程序员。

显然,(很少使用的)Web Workers需要多个线程(或多个进程) - 否则他们无法使用多个CPU核心。我的问题是,与Web Workers 分开,用多个线程实现JS引擎有什么好处?

为什么JS引擎在内部依赖于JS程序员使用的相同事件循环,并且只要需要执行任何IO时使用非阻塞OS调用,就不能始终保持单线程?

澄清一下:即使用户只用一个标签打开一个窗口,JS引擎也会使用一个线程池。

编辑:已回复here

1 个答案:

答案 0 :(得分:1)

脚本引擎的许多部分都可以从并行化中受益,因为它们可以同时针对脚本的不同部分或相互关联运行:

  • 解析
  • 汇编
  • JIT,优化
  • 调试/记录/纹
  • 垃圾收集
  • 图形

这甚至不涉及在不同使用环境(工作脚本,浏览环境)的多个引擎实例之间共享。