JavaScript:有没有计划在未来的版本中实现线程?

时间:2012-04-13 00:33:09

标签: javascript

随着库的发展变得越来越容易编程,似乎人们正在使用JS来获取Java在其全盛时期所使用的更多内容。

也就是说,我们知道JS存在很多性能问题,其中一个就是使用线程优化运行时的能力。

我看到了这个:Why doesn't JavaScript support multithreading?,但这是在3 - 4年前回答的(一年中有很多变化,更不用说3-4了)。随着HTML5的快速增长,如果对此进行更多的考虑,我会更加好奇。

3 个答案:

答案 0 :(得分:2)

你应该问,ECMA TC39,他们拥有ECMAScript。

但简短的回答是否定的,如果你有长期运行的脚本,你想要“生成一个新线程”,你应该查看WebWorkers,它们在自己的上下文中运行,并且技术上在另一个帖子上。

答案 1 :(得分:1)

我认为随着时间的推移,我们会看到WebWorkers可以做什么以及如何与主要的javascript线程进行通信。今天它非常有限,但有一些方法可以使它变得更强大而不会有使主要的javascript线程成为单线程的稳定性和简单性。

例如,今天您无法在WebWorker中加载图像或准备图形,但这对图形密集型应用程序非常有用。你可以做计算,但仅限于此。

例如,您无法在任何后台进程中操纵动画的DOM对象。这也非常有用 - 认为浏览器引擎实现起来更复杂。

答案 2 :(得分:0)

JS没有 - 也可能不会 - 支持多线程的原因是因为它不适合JS所做的工作,尤其是在浏览器中。如果您有许多CPU限制工作要做并且不介意为锁定等付出代价,则并发线程很有用。但是浏览器JS根本不会 - 或者不应该 - 完成很多CPU限制的工作:它是一个事件驱动的环境,因此JS只需要一个线程。它在每个工作块之后产生对浏览器的控制,等待下一个事件 - 计时器,点击,onLoad或其他任何事件。并发性会大大增加管理所有事件处理程序的工作量并且不会增加很多性能 - 所有线程都将等待相同的事件,除非你有大量的事件触发,否则将无法保留你的线程忙。

正如Slace所说,WebWorkers旨在允许奇怪的情况,想要在浏览器JS中进行CPU绑定工作,但它们不是真正的多线程。