为什么JavaScript不支持多线程
JavaScript过去是单线程的。它使用所谓的事件循环来运行。
事件循环有一个简单的任务-监视调用堆栈和回调队列。如果调用堆栈为空,它将从队列中获取第一个事件,并将其推送到调用堆栈中,从而有效地运行它。
浏览器中的JS不支持事件循环中的多线程处理,因为99.999%的网站不需要它。事件循环无缝地处理所有事情。
对于剩下的应用,开发者可以使用webworker。webworker是Web内容在后台线程中运行脚本的一种简单方法。工作线程可以在不干扰用户界面的情况下执行任务。此外,它们可以使用XMLHttpRequest执行I/O(尽管responseXML和channel属性始终为null)。一旦创建,worker可以通过将消息发布到由该代码指定的事件处理程序(反之亦然),向创建它的JavaScript代码发送消息。