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

JavaScript:有计划在未来版本中实现线程吗?,javascript,Javascript,随着库的不断发展,编程变得越来越容易,人们似乎正在使用JS来实现Java在其鼎盛时期可能会用到的更多功能 也就是说,我们知道JS存在许多性能问题,其中之一就是使用线程优化运行时的能力 我看到了:,但这是3-4年前的答案(一年内变化很大,更不用说3-4年了)。随着HTML5的快速发展,我更好奇的是这是否得到了更多的考虑。你应该问,他们拥有ECMAScript 但是简短的回答是否定的,如果你有长时间运行的脚本,你想“产生一个新的线程”,因为你应该检查一下,它们在自己的上下文中运行,技术上在另一个线程

随着库的不断发展,编程变得越来越容易,人们似乎正在使用JS来实现Java在其鼎盛时期可能会用到的更多功能

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

我看到了:,但这是3-4年前的答案(一年内变化很大,更不用说3-4年了)。随着HTML5的快速发展,我更好奇的是这是否得到了更多的考虑。

你应该问,他们拥有ECMAScript


但是简短的回答是否定的,如果你有长时间运行的脚本,你想“产生一个新的线程”,因为你应该检查一下,它们在自己的上下文中运行,技术上在另一个线程上运行。

我想随着时间的推移,我们将看到WebWorkers可以做什么以及如何与主javascript线程通信的扩展。今天,它非常有限,但是有一些方法可以使它变得更强大,而不必冒让主javascript线程成为单线程的稳定性和简单性的风险

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


例如,您不能在任何类型的后台进程中为动画操作DOM对象。这也是非常有用的,因为浏览器引擎的实现要复杂得多。

JS不支持多线程的原因是它不适合JS所做的工作,尤其是在浏览器中。如果您有大量CPU限制的工作要做,并且不介意为锁定等付出代价,那么并发线程非常有用。但是浏览器JS根本不需要做很多CPU限制的工作:它是一个事件驱动的环境,所以JS只需要一个线程。它在每个工作块完成后将控制权交给浏览器,空闲地等待下一个事件——计时器、单击、加载或其他事件。并发将极大地增加管理所有事件处理程序的工作量,而不会增加太多性能—您的所有线程都将等待相同的事件,并且除非您有大量的事件触发,否则将没有足够的工作使线程保持忙碌


正如Slace在上文中所说,WebWorkers打算允许在浏览器JS中执行CPU限制的工作,但它们不是真正的多线程。

我知道这可能会结束,但它的答案是这样的,我不介意冒这个风险。jimw:没错,除了线程限制之外,JS没有以其他方式使用的原因之一。例如,游戏、计算模型等。请注意,我承认JS还存在其他问题,这些问题也会阻碍这些应用程序,但仍然存在。我的观点是,JS的未来可能包括更多“CPU限制的工作”。再说一遍,浏览器本身可能只是操作系统实例。