javascript - 为什么 JavaScript 不支持多线程?

标签 javascript multithreading browser

这是一个深思熟虑的设计决定还是我们当前浏览器的问题,这些问题将在未来的版本中得到纠正?

最佳答案

JavaScript 不支持多线程,因为浏览器中的 JavaScript 解释器是单线程 (AFAIK)。即使是谷歌浏览器也不会让单个网页的 JavaScript 并发运行,因为这会导致现有网页出现大量并发问题。 Chrome 所做的只是将多个组件(不同的选项卡、插件等)分离到不同的进程中,但我无法想象一个页面有多个 JavaScript 线程。

但是,正如建议的那样,您可以使用 setTimeout 来允许某种调度和“假”并发。这会导致浏览器重新获得对渲染线程的控制权,并在给定的毫秒数后启动提供给 setTimeout 的 JavaScript 代码。如果您希望在对其执行操作时允许刷新视口(viewport)(您所看到的),这将非常有用。只是循环通过例如坐标和相应地更新元素只会让您看到开始和结束位置,而两者之间没有任何内容。

我们在 JavaScript 中使用了一个抽象库,它允许我们创建由同一个 JavaScript 解释器管理的进程和线程。这允许我们以以下方式运行操作:

  • 进程 A,线程 1
  • 进程 A,线程 2
  • 进程 B,线程 1
  • 进程 A,线程 3
  • 进程 A,线程 4
  • 进程 B,线程 2
  • 暂停进程 A
  • 进程 B,线程 3
  • 进程 B,线程 4
  • 进程 B,线程 5
  • 启动流程 A
  • 进程 A,线程 5

这允许某种形式的调度和伪造并行、线程的启动和停止等,但它不是真正的多线程。我认为它永远不会在语言本身中实现,因为真正的多线程只有在浏览器可以运行单页多线程(甚至多个核心)时才有用,而且困难更大比额外的可能性。

关于 JavaScript 的 future ,请查看以下内容: https://developer.mozilla.org/presentations/xtech2006/javascript/

关于javascript - 为什么 JavaScript 不支持多线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39879/

相关文章:

javascript - 使用 JavaScript URL 模拟 JSONP 响应

python - 如何在Python中动态创建多个线程

java - eclipse 插件中的 SWT 浏览器在 Mac 和 Windows 中的行为不同

css - 浏览器如何自动调整网站大小以移动浏览?

html - 使用行高 : 0 时文本向上推 1px

javascript - 关于移动高度问题的 Leaflet.js map

javascript - 当函数取消隐藏 2 个元素时如何在 javascript 中显示/隐藏?

javascript - 是否有另一种方法可以在不使用 Promise 的情况下从该 SQL 返回值?

android - 为什么kotlin协程可以在另一个线程上操作UI元素

java - Couchbase:从静态代码块中初始化需要更长的时间