微软表示IE9具有并行JavaScript渲染和执行能力。

7
新的JavaScript引擎通过Windows利用多个CPU核心并行解释、编译和运行代码。- http://technet.microsoft.com/en-us/library/gg699435.aspx Chakra引擎在可用时利用多个CPU核心并行解释、编译和执行代码。- http://msdn.microsoft.com/en-us/ie/ff468705.aspx 等等,这是什么意思?这是否意味着我们在IE9中有多线程并行JavaScript代码执行(除了Web Worker之外)?
我想这只是一种糟糕的营销噱头,但我想看到更多关于此的信息。也许他们的意思是不同的浏览器窗口/标签/进程可以利用多个CPU?

4
我感觉它们的意思是“当您在页面中包含多个脚本时,我们将并行加载和解释它们”。实际的JavaScript执行是同步的。 - Raynos
对此表示赞同,@Raynos。但他们指出“执行/运行”(“执行”和“运行”是同义词,对吧?)可以并行进行。 - David Murdoch
1
@DavidMurdoch 他们做不到。如果这样的话,一半的互联网都会崩溃,我们早就会注意到IE9中的这些竞态条件了。同时,他们可以理解地在每个标签页上使用一个js线程并行运行js代码。 - Raynos
当然,JavaScript 作为同步语言只比大多数汇编代码作为同步语言的问题略微更大一些吧?我们有超标量 CPU,因为在执行短代码段并行运行时通常可以发现语义上串行仍会产生正确结果。我想在 JavaScript 中,几乎所有(如果您回顾了全部代码)都是通过回调完成的,重点是要跟踪那些回调函数查看和/或修改哪些全局状态的部分,以及哪些实际上是完全独立的。 - Tommy
@Tommy,是的...当然,那会很好...但我认为他们不会这样做。或者他们只是指代码与在另一台机器上运行的代码并行运行。哈哈。 - David Murdoch
我认为他们的意思是,由JavaScript代码驱动的CSS更改可以与脚本执行并行处理。所有这些都必须非常小心地处理,以避免“一半的互联网出了问题”的问题。同样,我不认为它们可以并行处理已导入的脚本。如果我引入了jQuery,然后是自己的代码,很明显第一个脚本必须完全运行,才能开始运行我的脚本。 - Pointy
1个回答

3

结论基本上是根据评论提供的,因此作为社区维基答案,以便这个问题最终得到一个实际的答案:

很可能微软的意思是解释和/或运行的分离任务与编译同时进行。他们可能应用了类似Sun旧版HotSpot JVM的技术,这样Javascript虚拟机就可以在第一时间开始解释代码,因为它能够立即开始执行。对于出现使用频率足够高的任何代码,它还会JIT编译它们,以获得更好的性能。它甚至可能有不同级别的编译器优化,并逐渐增加它们。如果是这样的话,它可能在解释或运行代码片段的同时,使用多核来编译任意多个其他的代码片段,甚至重新编译并更好地优化正在运行的同一代码片段。

然而,在技术层面上也有可能通过静态分析来确定回调函数在状态上是否相互独立,并允许这些回调函数在触发事件时并行执行。这样,Javascript虚拟机实际上可以并行解释/运行代码,而不影响语言的语义序列性质。这样的系统逻辑上类似于超标量CPU的操作,尽管它距离超标量CPU有很大的差距,并且具有显著更高的复杂性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接