小编典典

为什么 JavaScript 不支持多线程?

all

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


阅读 79

收藏
2022-04-18

共1个答案

小编典典

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

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

我们在 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 的未来,请查看: https
://developer.mozilla.org/presentations/xtech2006/javascript/

2022-04-18