随着库的发展,使得编程变得更容易,人们似乎正在使用JS做更多的事情,而Java在其全盛时期就会被使用。
也就是说,我们知道JS有很多性能问题,其中之一就是使用线程优化运行时的能力。
我看到了这个:Why doesn't JavaScript support multithreading?,但这个问题在3-4年前就得到了回答(一年内发生了很多变化,更不用说3-4年了)。随着HTML5的快速增长,我更加好奇这一点是否得到了更多的考虑。
发布于 2012-04-13 08:36:34
你应该问,ECMA TC39他们拥有ECMAScript。
但简短的答案是否定的,如果你有长期运行的脚本,你想要“产生一个新的线程”,你应该检查WebWorkers,它们在自己的上下文中运行,技术上是在另一个线程上运行。
发布于 2012-04-13 08:42:39
我认为随着时间的推移,我们将看到WebWorkers可以做什么以及它们如何与主javascript线程通信的扩展。今天,它非常有限,但有一些方法可以使它变得更强大,而不会危及主javascript线程单线程的稳定性和简单性。
例如,今天您不能在WebWorker中加载图像或准备图形,但这对于图形密集型应用程序将非常有用。你可以做计算,但在这方面是有限的。
例如,您不能在任何类型的后台进程中操作用于动画的DOM对象。这也将是非常有用的--对于浏览器引擎来说实现起来会更复杂。
发布于 2012-04-13 08:48:11
JS不支持多线程的原因是它不适合JS所做的工作,尤其是在浏览器中。如果您有大量CPU受限的工作要做,并且不介意在锁定等方面付出代价,则并发线程非常有用。但是浏览器JS根本不--或者根本不应该--做很多CPU相关的工作:它是一个事件驱动的环境,所以JS只需要一个线程。它在每一块工作后将控制权交给浏览器,空闲地等待下一个事件-计时器、点击、onLoad或其他任何事件。并发将极大地增加管理所有事件处理程序的工作量,并且不会增加太多性能-所有线程都将等待相同的事件,除非您有大量的事件触发,否则将没有足够的工作来保持线程忙碌。
正如Slace上面所说的,WebWorkers旨在允许在浏览器JS中执行CPU受限的工作的奇怪情况,但它们不是真正的多线程。
https://stackoverflow.com/questions/10133773
复制相似问题