为什么 JavaScript 不支持多线程?


JavaScript 以前是单线程的。它使用所谓的事件循环运行。

事件循环有一个简单的工作——监视调用堆栈和回调队列。如果调用堆栈为空,它将从队列中选取第一个事件,并将其推送到调用堆栈中,以便有效地运行它。

浏览器中的 JS 在事件循环中不支持多线程,因为 99.999% 的网站不需要这样做。事件循环无缝地处理所有事情。

对于剩余的应用程序,开发者可以使用 Web 工作器。Web 工作器是 Web 内容在后台线程中运行脚本的一种简单方法。工作器线程可以在不干扰用户界面的情况下执行任务。此外,它们可以使用 XMLHttpRequest 执行 I/O(尽管 responseXML 和 channel 属性始终为 null)。创建后,工作器可以通过发布消息到由该代码指定的事件处理程序,将消息发送到创建它的 JavaScript 代码(反之亦然)。本文详细介绍了使用 Web 工作器的相关内容。

更新于: 2019 年 12 月 2 日

465 次浏览

开启你的 职业生涯

完成课程获得认证

开始学习
广告